Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何转换由字符表示的十六进制值?_C++_Hex - Fatal编程技术网

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])形成的?@ndarkness
b我将其解释为十六进制表示形式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])形成的?@ndarkness
b我将其解释为十六进制表示形式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