借用strtol函式可以直接將乙個cstring物件轉化為任意數制的整數。
比如:cstring st = "20";
int n = strtol(st,null,16);
strtol函式原型:
long int strtol(const char *nptr,char **endptr,int base);
引數base範圍從2至36,或0。引數base代表採用的進製方式,如base值為10則採用10進製,若base值為16則採用16進製制等。當base值為0時則是採用10進製做轉換,但遇到如』0x』前置字元則會使用16進製做轉換、遇到』0』前置字元而不是』0x』的時候會使用8進製做轉換。
一開始strtol()會掃瞄引數nptr字串,跳過前面的空格字元,直到遇上數字或正負符號才開始做轉換,再遇到非數字或字串結束時('\0')結束轉換,並將結果返回。若引數endptr不為null,則會將遇到不合條件而終止的nptr中的字元
指標由endptr返回;若引數endptr為null,則會不返回非法字串。
1.不僅可以識別十進位制整數,還可以識別其它進製的整數,取決於base引數,比如strtol("0xdeadbee~~", null, 16)返回0xdeadbee的值,strtol("0777~~", null, 8)返回0777的值。
2.endptr是乙個傳出引數,函式返回時指向後面未被識別的第乙個字元。例如char *pos; strtol("123abc", &pos, 10);,strtol返回123,pos指向字串中的字母a。如果字串開頭沒有可識別的整數,例如char *pos; strtol("abcabc", &pos, 10);,則strtol返回0,pos指向字串開頭,可以據此判斷這種出錯的情況,而這是atoi處理不了的。
3.如果字串中的整數值超出long int的表示範圍(上溢或下溢),則strtol返回它所能表示的最大(或最小)整數,並設定errno為erange,例如strtol("0xdeadbeef~~", null, 16)返回0x7fffffff並設定errno為erange
進製轉換 十六進製制轉八進位制 十六進製制轉十進位制
在十六進製制轉為八進位制的過程中包含了將十六進製制轉化為二進位制以及將二進位制轉化為八進位制!我自己測試是沒什麼問題,但是在藍橋杯官網的測試系統就顯示執行錯誤qwq 不知道為什麼 附 include includeusing namespace std int main if len2 i 3 2 ...
進製轉換 二進位制轉十六進製制 十六進製制轉十進位制
這幾天在做乙個與plc互動的系統,plc會傳過來一些指令,這些指令是二進位制的格式,要轉為4位十進位制的指令來讀,下面是 部分 public class byteschange int beginindex 0 int length 16 string instructions while true...
漢字轉十六進製制 十六進製制轉漢字的函式
十六進製制轉漢字 public static string getchsfromhex string hex catch 獲得 cp936,chinese超集 system.text.encoding chs system.text.encoding.getencoding 936 code pag...