初接觸windows程式設計, 需要把數字轉為16進製表示的字串顯示出來, 如0x123456789abc轉為"123456789abc". 或000000123456789abc形式
想直接搜來用發現都是32位且無法滿足我要不要顯示0的需求.
32位數有庫函式可以直接轉換, c提供了itoa ltoa utoa等詳見數字轉換為字串 (windows特有).
不過需要注意在高版本上要改為_utoa_s 引數形式不變
也可以使用wsprintf(跨平台).
利用wsprintf就可以把64位數分為兩部分,分別轉換. 再對字串位置進行控制就可以輸出有0的形式
當然也可以順便轉換其他位的數字.
如果在迴圈裡使用了返回值形式一定要在使用完後delete掉字串空間不然造成可能堆溢位, 所以推薦引數返回形式 自行管理空間
在有0的情況下 緩衝區大小應+1 作為結束標誌
最後因為是寬字元 需要轉char的移步
char與wchar的轉換
ps: 我的寫法是用第16位來判斷顯示多少進製, 然後改變wsprint裡面的引數即可
vs2017 64位通過
//不顯示數字前的0
#define type_hexall_without_zero 0xf
#define type_hexword_with_zero 0x4
//顯示8位數字包括0
#define type_hexdword_with_zero 0x8
#define typdword_decimal 0xa008
#define type_decimalall_without_zero 0xa00f
//#define typqword_decimal 0xa010
//顯示16位數字包括0
#define type_hexqword_with_zero 0x10
#define loqword(l) ((dword) ( ( (qword) (l) ) & 0xffffffff) )
#define hiqword(l) ((dword)((((qword)(l)) >> 32) & 0xffffffff))
qword getdigits
(qword qwsrc)
return dwdigits;
}void hex2str
(qword qwsrc, qword srctype, lpwstr wszdest)
//16進製制任意型別並不顯示0位
case type_hexall_without_zero:
//根據進製要顯示幾個0
case type_hexdword_with_zero:
case type_hexqword_with_zero:
default
:break;}
}
數字轉英文(C 保留2位小數)
private string numbertoenglish decimal y else else string lstrrev lstrrev reversestring lstr 對左邊的字串取反字串 string a new string 5 定義5個字串變數用來存放解析出的三位一組的字串 ...
C 如何判斷作業系統位數是32位還是64位
方法一 對於c 來說,呼叫wmi是一種簡單易行的方式。我們可以用win32 processor類裡面的addresswidth屬性來表示系統的位寬。addresswidth的值受cpu和作業系統的雙重影響。具體的值如下面的 所示 32bit os 64bit os 32bit cpu address...
C 如何判斷作業系統位數是32位還是64位
方法一 對於c 來說,呼叫wmi是一種簡單易行的方式。我們可以用win32 processor類裡面的addresswidth屬性來表示系統的位寬。addresswidth的值受cpu和作業系統的雙重影響。具體的值如下面的 所示 32bit os 64bit os 32bit cpu address...