2017-02-16 31 views
0

Когда я произнес от Ulong64 до значения cstring, усекается в 64 бит, может ли кто-нибудь помочь мне в этом?Значения CString усекаются в течение 64-битного литья

HMONITOR hmonitor64; // Hmonitor decl 
hmonitor64 = (HMONITOR)0x0000000300290eaf;// initialize to big value 
ULONG64 lmonitor64; 
CString strMonitor64; 
lmonitor64 = (ULONG64)hmonitor64; // typecasted to long 
strMonitor64.Format(_T("%lu"), lmonitor64); // value gets truncated in cstring 
+0

Пожалуйста, форматировать исходный код. (Используйте кнопку «{}» редактора.) – Scheff

+2

Без каких-либо исследований я бы предположил, что вы должны использовать ''% llu''. 'long' означает 32 бита в Windows/VC даже на 64-битных платформах. Таким образом, вы должны использовать 'long long unsigned' или (как и вы)' ULONG64'. – Scheff

+0

Усечение также происходит в 32-битном коде. Вы просто не заметили, потому что 'HMONITOR' 32-битный в 32-битном коде. – IInspectable

ответ

3

Правильный способ форматирования ULONG64 заключается в следующем:

HMONITOR hmonitor64; // Hmonitor decl 
hmonitor64 = (HMONITOR)0x0000000300290eaf;// initialize to big value 
ULONG64 lmonitor64; 
CString strMonitor64; 
lmonitor64 = (ULONG64)hmonitor64; // typecasted to long 
strMonitor64.Format(_T("%I64u"), lmonitor64); // value gets truncated in cstring 

 Смежные вопросы

  • Нет связанных вопросов^_^