win32 c 32 64位數字轉字串

2021-10-07 09:21:54 字數 1458 閱讀 8321

初接觸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...