C++ 如何转换由字符表示的十六进制值?
我有一个无符号字符数组,我想将它的前四个元素解析为十六进制值 我接收并C++ 如何转换由字符表示的十六进制值?,c++,hex,C++,Hex,我有一个无符号字符数组,我想将它的前四个元素解析为十六进制值 我接收并未生成的字符数组a[],其内容如下 for (int i = 0; i < l; i++) { SerialUSB.print(" Index : "); SerialUSB.print(i); SerialUSB.print(" ,Unsigned Char "); SerialUSB.print( a[i]); SerialUSB.print(", CHAR "); SerialUSB.pri
未生成的字符数组a[]
,其内容如下
for (int i = 0; i < l; i++) {
SerialUSB.print(" Index : ");
SerialUSB.print(i);
SerialUSB.print(" ,Unsigned Char ");
SerialUSB.print( a[i]);
SerialUSB.print(", CHAR ");
SerialUSB.print( (char) a[i]);
SerialUSB.println();
}
Index:0 ,Unsigned Char 98, CHAR b
Index:1 ,Unsigned Char 49, CHAR 1
Index:2 ,Unsigned Char 53, CHAR 5
Index:3 ,Unsigned Char 57, CHAR 9
Index:4 ,Unsigned Char 55, CHAR 7
Index:5 ,Unsigned Char 56, CHAR 8
Index:6 ,Unsigned Char 85, CHAR U
Index:7 ,Unsigned Char 55, CHAR 7
Index:8 ,Unsigned Char 56, CHAR 8
Index:9 ,Unsigned Char 85, CHAR U
Index:10 ,Unsigned Char 55, CHAR 7
Index:11 ,Unsigned Char 56, CHAR 8
Index:12 ,Unsigned Char 85, CHAR U
提前感谢。您可以从十六进制数字中获取整数值(其中十六进制数字是此集合中的任意字符:
0123456789abcdefabcddef
):
:
您可以从十六进制数字中获取整数值(其中十六进制数字是此集合中的任意字符:
0123456789abcdefabcddef
):
:
为了得到一个十六进制字符的值,我在评论你第一句话的不精确性。我知道函数的作用。为了得到十六进制字符的值。我在评论你第一句话的不精确性。我知道函数的作用。@ndarkness我完全不知道你想做什么,即使你更新了你的问题。你能写清楚一些东西,而不留下猜测什么是
a
等吗?!你有char*a=“b159…”,那你为什么说a[2]=“2”
?您想为0xb
,0x1
,0x5
,0x9
?inHex[0]=0x11;//转换为十六进制((char)a[0])
-这完全是一团糟,没有任何意义。不是到十六进制,而是从十六进制,到十六进制的结果是一个字符串,若你们想得到整数,那个么它是从十六进制得到的b
或“b”如果作为十六进制数字处理,则表示11
,或0xb
如果写入十六进制。@ndarkness为什么“b”变成0x11
!?你了解你自己吗?为什么第二个0x15是由strcat(a[1],a[2])形成的?@ndarknessb我将其解释为十六进制表示形式b
-有什么区别<代码>0xb==0xB@ndarkness即使你更新了你的问题,我也完全不明白你想做什么。你能写清楚一些东西,而不留下猜测什么是a
等吗?!你有char*a=“b159…”,那你为什么说a[2]=“2”
?您想为0xb
,0x1
,0x5
,0x9
?inHex[0]=0x11;//转换为十六进制((char)a[0])
-这完全是一团糟,没有任何意义。不是到十六进制,而是从十六进制,到十六进制的结果是一个字符串,若你们想得到整数,那个么它是从十六进制得到的b
或“b”如果作为十六进制数字处理,则表示11
,或0xb
如果写入十六进制。@ndarkness为什么“b”变成0x11
!?你了解你自己吗?为什么第二个0x15是由strcat(a[1],a[2])形成的?@ndarknessb我将其解释为十六进制表示形式b
-有什么区别<代码>0xb==0xb
inHex[0] = 0xB; // 0xB = 11
inHex[1] = 0x15; // which should come from having concatenated the values `a[1]= '1'` algong with `a[2]='2'`
inHex[3] = 0x9; // which should be the char value of a[3] in HEX
int fromHex(char c)
{
if (c>='0' && c<='9')
return c-'0';
if (c>='a' && c<='f')
return 10+(c-'a');
if (c>='A' && c<='F')
return 10+(c-'A');
return -1; // unexpected char
}
inHex[0] = fromHex(a[0]);
inHex[1] = fromHex(a[1]) * 16 + fromHex(a[2]);
inHex[2] = fromHex(a[3]);
#include <stdio.h>
int fromHex(char c)
{
if (c >= '0' && c <= '9')
return c - '0';
if (c >= 'a' && c <= 'f')
return 10 + (c - 'a');
if (c >= 'A' && c <= 'F')
return 10 + (c - 'A');
return -1; // unexpected char
}
int main()
{
char a[] = "b159";
int inHex[3];
inHex[0] = fromHex(a[0]);
inHex[1] = fromHex(a[1]) * 16 + fromHex(a[2]);
inHex[2] = fromHex(a[3]);
printf("%d %d %d\n", inHex[0], inHex[1], inHex[2]);
printf("0x%x 0x%x 0x%x\n", inHex[0], inHex[1], inHex[2]);
}
11 21 9
0xb 0x15 0x9