2017-02-16 6 views
0

Ulong64からキャストするときの値が64ビットに切り捨てられても、これで助けてくれますか?64bitキャスト中にCStringの値が切り捨てられる

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 "'を使用しなければならないと思っています。 「長い」とは、64ビットプラットフォームでもWindows/VCで32ビットを意味します。だから、あなたは '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 
関連する問題