十六进制字符串转十进制整数,诡异的问题,Linux和Windows结果不同

static int HexAToInt(char *str, int length)

{

char  revstr[16] = { 0 };  //根据十六进制字符串的长度,这里注意数组不要越界

int   num[16] = { 0 };

int   count = 1;

int   result = -1;

if (NULL != str)

{

strncpy(revstr, str, length);

for (int i = length - 1; i >= 0; i--)

{

if ((revstr[i] >= ‘0‘) && (revstr[i] <= ‘9‘))

num[i] = revstr[i] - 48;//字符0的ASCII值为48

else if ((revstr[i] >= ‘a‘) && (revstr[i] <= ‘f‘))

num[i] = revstr[i] - ‘a‘ + 10;

else if ((revstr[i] >= ‘A‘) && (revstr[i] <= ‘F‘))

num[i] = revstr[i] - ‘A‘ + 10;

else

num[i] = 0;

result = result + num[i] * count;

count = count * 16;//十六进制(如果是八进制就在这里乘以8)

}

}

#ifdef __linux__

result++;

#endif

return result;

}

Why???!!!

时间: 2024-08-05 15:14:38

十六进制字符串转十进制整数,诡异的问题,Linux和Windows结果不同的相关文章

十六进制字符串转十进制整数

十六进制字符串转十进制整数 编写一个函数,函数接收一个字符串,是由十六进制数组成的一组字符串,函数的功能是把接到的这组字符串转换成十进制数字.并将十进制数字返回. #include <iostream> using namespace std; // 十六进制字符串的最大长度 #define MAX_HEX_STR_LEN 100 bool hexToDec(char shex[], int & idec) { size_t i = 0, len = 0; int mid = 0; l

VC中,如何将十六进制字符串转换为十进制数?

原文链接:http://blog.csdn.net/bennyfun79/article/details/6934843 在程序中,我们有时需要将一个十六进制字符串转换为十进制数字.比如: 1 char *ptr="0x11"; 2 int n=0; 3 //我们想让n等于0x11,即17 通常我们在C中,想将一个字符串转换为一整形数字,通常会使用下面的方法: view plaincopy to clipboardprint? 1 char *ptr="123";

将一个十六进制字符串转换为十进制数值的问题

在程序中,我们有时需要将一个十六进制字符串转换为十进制数字.比如:char *ptr="0x11";int n=0;//我们想让n等于0x11,即17 通常我们在C中,想将一个字符串转换为一整形数字,通常会使用下面的方法: char *ptr="123"; int n=0; n=atoi(ptr); printf("%d/n",n); //输出:123 但是atoi库函数只能将十进制字符串转化为int整形,比如下面的例子: #include &l

十六进制字符串转十进制 x64/x86

ULONG_PTR ulModBase = 0; #if defined(_WIN64) ulModBase = _tcstoui64(strParam,NULL,16); #else ulModBase = _tcstoul(strParam,NULL,16); #endif http://www.cnblogs.com/khler/archive/2010/11/10/1873284.html =================================================

使用NSScanner,将十六进制字符串转十进制

例子:  NSString * numStr = [@"0x110" substringFromIndex:2]; unsigned long long result = 0; NSScanner *scanner = [NSScanner scannerWithString:numStr]; [scanner scanHexLongLong:&result]; NSLog(@"result - - %lld",result); 参考网址:http://bl

android byte字节数组转换十六进制字符串(物联网开发总结)

想起前段时间的物联网的外包开发,经常遇到通过wifi接受的数据,要通过转换成十六进制字符串,或者最后又是十进制数据.都是根据双方的协议来开发的.那么我发送过去的数据也需要,经过特殊转换成byte字节发过去,硬件那边收到不至于乱码的数据. 1.硬件调试发给android这边是十六进制数据 原始数据:68 38 38 68 A 72 78 55 34 12 43 23 01 07 Y 00 00 00 0C 13 78 56 34 12 0C 3B 78 34 12 0C 26 78 56 34 1

数组-08. 字符串转换成十进制整数

数组-08. 字符串转换成十进制整数(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 张彤彧(浙江大学) 输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出.如果过滤后字符串的首字符为“-”,代表该数是负数. 输入格式: 输入在一行中给出一个以#结束的非空字符串. 输出格式: 在一行中输出转换后的十进制数.题目保证输出在长整型范围内.

5-2?字符串转换成十进制整数

5-2 字符串转换成十进制整数   (15分) 输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出.如果在第一个十六进制字符之前存在字符"-",则代表该数是负数. 输入格式: 输入在一行中给出一个以#结束的非空字符串. 输出格式: 在一行中输出转换后的十进制数.题目保证输出在长整型范围内. 输入样例: +-P-xf4+-1!# 输出样例: 这个题有一个坑点: 就是如果是0的话前面没有负号 -390

【算法C++】十进制字符串转十六进制字符串

问题描述 将一个十进制字符串转化为十六进制字符串. 问题解决 这个问题如果只是十进制转化为十六进制,其实是比较容易的,只要了解短除法就可以解决了,但题目里数是字符串,这就将题目的难度增高了.因为如果只是int型,那最多也就支持个10位数:但字符串却可以上千位,所以我们使用短除法的时候会比较麻烦. 这里我先将字符串转成了int型,先把简单的10位数的实现出来,来理顺一下思路.下面是10进制数转16进制的代码: int main(){ string s; while (cin >> s){ int