C语言 十六进制整数字符串转十进制整数
生活随笔
收集整理的這篇文章主要介紹了
C语言 十六进制整数字符串转十进制整数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題描述】
給定一個不超過0xFFFFFFFF的正的十六進制數字符串,將它轉換為正的十進制數后輸出。
注:十六進制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。
樣例輸入
FFFF
樣例輸出
65535
【解決方案】
方案1:
使用C標準庫strtol函數。
結果:
方案2:
自定義函數。
注:此函數支持識別0x和0X前綴,以及字符串中可包含大小寫。
結果:
補充:
實現將一個字符串中多個十六進制字符(有空格或其他字符間隔)分別轉換成十進制數,并返回成功轉換的數量。
樣例輸入
F1 65 3a 5b 6a1a
樣例輸出
241 101 58 91 27162
方案1:
#include <stdio.h> #include <stdlib.h>int nhtoi(int* dst, char* src) {char* endptr = NULL;int num = 0;while (1){if((*src >= '0' && *src <= '9') || (*src >= 'a' && *src <= 'f') || (*src >= 'A' && *src <= 'F')){num++;*(dst++) = strtol(src, &endptr, 16);while ((*src >= '0' && *src <= '9') || (*src >= 'a' && *src <= 'f') || (*src >= 'A' && *src <= 'F'))src++;//跳過當前處理數}else if (*src == '\0'){if (num == 0)return -1;elsereturn num;}else{src++;}} }int main(void) {char str1[] = "F1 65 3a 5b 6a1a";char* endptr = NULL;int data[10] = {0};int num = 0;num = nhtoi(data, str1);printf("%s\r\n", str1);for (int i = 0; i < num; i++){printf("%d \r\n", data[i]);}return 0; }結果:
方案2:
就是用前面自己實現的htoi函數替換庫函數strtol即可。
結果:
總結
以上是生活随笔為你收集整理的C语言 十六进制整数字符串转十进制整数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RT-Thread FinSH控制台添加
- 下一篇: STM32 map文件解析