天天看點

C++資料格式轉換1 将整數轉化為字元串2 将字元串轉換為整數3 字元串間的轉換

本文主要講述整數、二進制字元串與十六進制字元串之間的轉換。

1 将整數轉化為字元串

1.1 将整數轉換為二進制字元串

使用_ltoa_s()函數可以将整數轉換為二進制字元串。該函數的作用是将一個long整數轉換為字元串。_ltoa_s()函數有很多格式,其中的一個格式為

errno_t _ltoa_s(long value, char *str, int radix);
           

其中,參數value指定了要轉換的整數;str指定轉換後的字元串;radix指定了要将value轉換成的進制。如果轉換成功,傳回值是0;如果轉換失敗,則傳回失敗代碼。

long i = 1024L;
char b[33], bs[33];
_ltoa_s(i, b, 2);
sprintf_s(bs, "%032s", b);
printf("i=%d, bs=%s\n", i, bs);
           

其中,sprintf_s() 函數的作用是将轉換後的字元串 b 進行格式化處理,并将格式化後的字元串儲存在 bs 中。将 b 進行 %032s 的格式化,其中, 32 表示轉換後的字元串長度為 32,32 前面的 0 表示如果 b 的位數不足 32 ,則用 0 補齊。輸出後的效果如圖 1 所示。

C++資料格式轉換1 将整數轉化為字元串2 将字元串轉換為整數3 字元串間的轉換

圖1 将整數轉換為二進制字元串

1.2 将整數轉換為十六進制字元串

依然使用_ltoa_s()函數,可以将整數轉換為十六進制字元串。

i = 1024L;
char hs[9], h[9];
_ltoa_s(i, h, 16);
sprintf_s(hs, "%08s", h);
printf("i=%d, hs=%s\n", i, hs);
           

其中,_ltoa_s()函數的第3個參數16表示将整數i轉換為16進制的字元串;sprintf_s()函數的第2個參數指定了轉換的格式,8表示轉換後的字元串位數是8位,8前面的0表示不足8位時,用0來填充。輸出的效果如圖2所示。

C++資料格式轉換1 将整數轉化為字元串2 将字元串轉換為整數3 字元串間的轉換

圖2 将整數轉換為十六進制字元串

2 将字元串轉換為整數

2.1 将二進制字元串轉換為整數

使用strtol()函數可以将二進制字元串轉換為整數。該函數的格式為

long strtol(const char* nptr, char **endptr, int base);
           

其中,參數nptr指定了要轉換的字元串;endptr指向了停止掃描的字元;base指定了nptr對應的進制數。傳回值是轉換後的整數。

strncpy_s(bs, 33, "00000000000000000000010000000000", 33);
char *e;
i = strtol(bs, &e, 2);
printf("bs=%s, i=%d\n", bs, i);
           

其中,strncpy_s()函數的作用是将bs指定為二進制字元串;strtol()函數的第3個參數指定了bs表示的字元串對應的是二進制。其輸出如圖3所示。

C++資料格式轉換1 将整數轉化為字元串2 将字元串轉換為整數3 字元串間的轉換

圖3 将二進制字元串轉換為整數

2.2 将十六進制字元串轉換為整數

依然使用strtol()函數,将十六進制字元串轉換為整數。

strncpy_s(hs, 9, "00000400", 9);
i = strtol(hs, &e, 16);
printf("hs=%s, i=%d\n", hs, i);
           

其中,strtol()函數的第2個參數e是在“2.1 将二進制字元串轉換為整數”中定義的變量;第3個參數16表示hs表示的字元串其對應16進制。以上代碼的輸出如圖4所示。

C++資料格式轉換1 将整數轉化為字元串2 将字元串轉換為整數3 字元串間的轉換

圖4 将十六進制字元串轉換為整數

3 字元串間的轉換

3.1 将二進制字元串轉換為十六進制字元串

将二進制字元串轉換為十六進制字元串,實際上就是使用在“2.1 将二進制字元串轉換為整數”中提到的方法,先将二進制字元串轉換為整數,之後使用“1.2将整數轉換為十六進制字元串”中提到的方法,再将整數轉換為十六進制字元串。

//将将二進制字元串轉換為整數
strncpy_s(bs, 33, "00000000000000000000010000000000", 33);
i = strtol(bs, &e, 2);
   //将整數轉換為十六進制字元串
_ltoa_s(i, h, 16);
sprintf_s(hs, "%08s", h);
printf("bs=%s, hs=%s\n", bs, hs);
           

以上代碼的輸出如圖5所示。

C++資料格式轉換1 将整數轉化為字元串2 将字元串轉換為整數3 字元串間的轉換

圖5 将二進制字元串轉換為十六進制字元串

3.2 将十六進制字元串轉換為二進制字元串

将二進制字元串轉換為十六進制字元串,實際上就是使用在“2.2 将十六進制字元串轉換為整數”中提到的方法,先将十六進制字元串轉換為整數,之後使用“1.1将整數轉換為二進制字元串”中提到的方法,再将整數轉換為二進制字元串。

//将将十六進制字元串轉換為整數
strncpy_s(hs, 9, "00000400", 9);
i = strtol(hs, &e, 16);
//将整數轉換為二進制字元串
_ltoa_s(i, b, 2);
sprintf_s(bs, "%032s", b);
printf("hs=%s, bs=%s\n", hs, bs);
           

以上代碼的輸出如圖6所示。

C++資料格式轉換1 将整數轉化為字元串2 将字元串轉換為整數3 字元串間的轉換

圖6 将十六進制字元串轉換為二進制字元串

繼續閱讀