【问题标题】:Convert a uint8_t array of values to their hex equivalents in a char array将 uint8_t 值数组转换为 char 数组中的十六进制等效值
【发布时间】:2016-03-24 02:42:16
【问题描述】:

char readBuf[] = "96 36 D4 D1 F8 C1 8A E0 BF 29 10 91 3C 4D F1 5D 08";

我想将每对值转换为一个十六进制值,以便在新的 char[] 中有 17 个单独的十六进制值。

结果相当于用代码编写:

char hexStr[] = {0x96, 0x36, 0xD4, 0xD1, 0xF8, 0xC1, 0x8A, 0xE0, 0xBF, 0x29, 0x10, 0x91, 0x3C, 0x4D, 0xF1, 0x5D, 0x08}

我不知道如何从 readBuf 构造一个新的十六进制值以将其添加到新的 char[]。

【问题讨论】:

  • 你的结果对我来说没有意义。 readBuf[1] 是 '6' 并映射到 asciiStr 中的 0x36,但 readBuf[4] 也是 '6' 并映射到 0xF8。我错过了什么吗?
  • 我已经更新,希望能更清晰,并删除最后一条令人困惑的评论!
  • 问题是?

标签: c arrays hex data-conversion


【解决方案1】:

类似这样的:

char readBuf[] = "96 36 D4 D1 F8 C1 8A E0 BF 29 10 91 3C 4D F1 5D 08";
size_t length = strlen(readBuf);
// ideally the length of this should be computed from the string length and allocated dynamically
uint8_t result[17]; 
size_t pos = 0;
while(pos * 3 < length) {
    int value;
    int scanned = sscanf(readBuf + pos * 3, "%x", &value);
    if(scanned == 1) {
        result[pos] = value;
        pos ++;
    } else {
        fprintf(stderr, "Invalid hex number at %zu", pos * 3);
        break;
    }
}

【讨论】:

  • 感谢 Chris,这更加紧凑,无需使用 hex to int 方法。它还包括对无效十六进制数字的错误处理。结果,我更新了对此的正确答案。如果有人能看出为什么这不应该是公认的答案,请加入。
猜你喜欢
  • 2011-08-12
  • 1970-01-01
  • 2020-05-08
  • 2022-11-25
  • 1970-01-01
  • 2020-08-06
  • 2021-10-23
  • 2020-01-24
  • 2020-11-15
相关资源
最近更新 更多