日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言 十六进制整数字符串转十进制整数

發布時間:2024/1/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言 十六进制整数字符串转十进制整数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【問題描述】
  給定一個不超過0xFFFFFFFF的正的十六進制數字符串,將它轉換為正的十進制數后輸出。
  注:十六進制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。
樣例輸入
FFFF
樣例輸出
65535

【解決方案】
方案1:
使用C標準庫strtol函數。

#include <stdio.h> #include <stdlib.h>int main(void) {char str1[] = "FFFF";char* endptr = NULL;long data = 0;data = strtol(str1, &endptr, 16);printf("%s\r\n",str1);printf("data=%ld\r\n", data);return 0; }

結果:

方案2:
自定義函數。

#include <stdio.h>//將十六進制的字符串轉換成整數 int htoi(char* str) {int n = 0;if (str == NULL) return -1;if (*str == '0' && (*(str + 1) == 'x' || *(str + 1) == 'X')){str += 2;}while (1){if (*str >= '0' && *str <= '9'){n = 16 * n + (*str - '0');}else if (*str >= 'A' && *str <= 'F')//十六進制還要判斷字符是不是在A-F或者a-f之間{n = 16 * n + (*str - 'A' + 10);}else if (*str >= 'a' && *str <= 'f'){n = 16 * n + (*str - 'a' + 10);}else{break;}str++;}return n; }int main(void) {char str1[] = "0X1AaF";int data = 0;data = htoi(str1);printf("%s\r\n",str1);printf("data=%d\r\n", data);return 0; }

注:此函數支持識別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即可。

int nhtoi(int* dst, char* src) {int num = 0;while (1){if((*src >= '0' && *src <= '9') || (*src >= 'a' && *src <= 'f') || (*src >= 'A' && *src <= 'F')){num++;*(dst++) = htoi(src);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++;}} }

結果:

總結

以上是生活随笔為你收集整理的C语言 十六进制整数字符串转十进制整数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。