2012-07-18 208 views
1

我想添加两个十六进制值来获得一个结果十六进制值我写了下面的代码但是当我打印结果的值的结果是写例如"abc" ->61+62+63=186然而在写jk ->6a+6b我应该得到像d5,但它给12添加十六进制值以得到十六进制结果

这是里边反码我写:

我还定义了全局变量如

char buffer[20]; 
    long int li ; 

    for (int i = 0; i < length; ++i) { 
     itoa(TextAlia[i], buffer, 16); 
     li = li + atol (buffer); 
    } 
+1

'6a'(十六进制)'152'(八进制),'1101010'(二进制)和'106'(十进制)的表示法只是需要其适当操作环境的符号。通常,标准的数学函数只能用于**十进制**表示,因此您需要将**数字表示**转换为十进制(和后退)。 – 2012-07-18 14:04:02

回答

3
li = li + atol (buffer); 

atol在第一非数字(十进制)停止。要解析十六进制表示,使用

li += strtol(buffer, NULL, 16); 
0

尝试寻找这个:Adding hexa values in C#

或者试试这个:

int value = Convert.ToInt32(hexString1, 16) + Convert.ToInt32(hexString2, 16); 

希望这有助于。

+0

你可能把C++与'C#'混淆了? – 2012-07-18 14:12:28

+0

非常好。你是对的,我的好先生。 – plast1K 2012-07-18 15:30:36

1

我在这里假设您有两个字符串“TextAlia”和“TextAlib”,每个字符串都包含一个十六进制数字的字符串表示形式。增加的数量和产生一个十六进制的字符串作为输出的一个典型方式:

int a, b; 
sscanf(TextAlia, "%x", &a); 
sscanf(TextAlib, "%x", &b); 
printf("%x", a + b); 

然而,这不是在C添加十六进制数最快的方式,而不是典型的C++风格编写无论是。