【问题标题】:How to convert a hexadecimal value represented by a char?如何转换由 char 表示的十六进制值?
【发布时间】:2017-05-11 20:00:19
【问题描述】:

我有一个 unsigned char 数组,我想将它的前四个元素解析为 HEX 值。

我收到了unsiged char array 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

如何获取数组a[]的前四个元素的HEX值

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

提前致谢。

【问题讨论】:

  • @ndarkness 即使您更新了问题,我也完全不明白您要做什么。你能写清楚一些东西,而不用猜测a等是什么吗?!
  • 你有 char * a = "b159 ... ",那你为什么说 a[2]='2' 呢?您想为0xb0x10x50x9 中的每一个获得 4 个不同的整数吗?
  • inHex[0] = 0x11; // which should come from having converted toHEX( (char) a[0] ) - 这完全是一团糟,没有任何意义。它不是十六进制,而是来自十六进制,toHex 的结果是一个字符串,如果你想获取整数,那么它来自十六进制。 b 或 'B' 如果被视为十六进制数字,则表示 11,或 0xb 如果写入十六进制。
  • @ndarkness 为什么那个'b'变成0x11!?你了解自己吗?为什么第二个 0x15 是由 strcat(a[1],a[2]) 形成的?
  • @ndarkness b I would interpreate it as the HEXadecimal representation B - 有什么区别? 0xb == 0xB

标签: c++ hex


【解决方案1】:

您可以从十六进制数字中获取整数值(其中十六进制数字是此集合中的任何字符:0123456789abcdefABCDEF):

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
}

这样,如果你有 char a[] = "abcd",你会得到每个字符的 {11, 11, 12, 14}。

然后从您那里获取前 4 个字符的整数:

inHex[0] = fromHex(a[0]);
inHex[1] = fromHex(a[1]) * 16 + fromHex(a[2]);
inHex[2] = fromHex(a[3]);

Sample code:

#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

【讨论】:

  • 获取hex字符的value
  • 我在评论你第一句话的不精确性。我知道函数的作用。
猜你喜欢
  • 2012-07-23
  • 2011-10-02
  • 1970-01-01
  • 2011-05-25
  • 2015-06-04
  • 2012-02-24
  • 1970-01-01
  • 2011-03-31
  • 2013-08-03
相关资源
最近更新 更多