【问题标题】:converting a hex string array to hex array [duplicate]将十六进制字符串数组转换为十六进制数组[重复]
【发布时间】:2013-07-30 11:23:50
【问题描述】:

我正在努力在处理过程中将字符串理解为十六进制字符串。我正在编写一个小程序,我将输入 ascii 文本作为十六进制字符串。

那是我读到的:

char *str = "313233";

这实际上是 0x31、0x32 和 0x33,实际上是字符串“123”。

我需要一个无符号字符数组,如下所示:

unsigned char val[] = {0x31, 0x32, 0x33};

当我尝试 sscanf 或 sprintf 时,他们希望整数数组成为目标指针:(

也就是说,类似于:

sprintf(str, "%2x", &val[0]);

如何做到这一点?也许这很微不足道,但不知何故我很困惑。

谢谢。

【问题讨论】:

  • 0x31 不是 31 的十六进制数
  • 在我的帮助下,stackoverflow 上有一个类似的问题:stackoverflow.com/questions/3408706/…
  • @DavidRF true,但在我的情况下,我得到一个十六进制输入作为字符串,因此我确定该字符串是一个十六进制字符串:)
  • sscanf(str, "%2hhx%2hhx%2hhx", &val[0], &val[1], &val[2]);

标签: c hex


【解决方案1】:

sscanf 可以解决问题:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    char *str = "313233";
    size_t i, n = strlen(str) / 2;
    unsigned char *v;

    v = malloc(n);
    if (v == NULL) {
        perror("malloc");
        exit(EXIT_FAILURE);
    }
    for (i = 0; i < n; i++)
        sscanf(str + (i * 2), "%2hhx", &v[i]);
    for (i = 0; i < n; i++)
        printf("0x%2x\n", v[i]);
    free(v);
    return 0;   
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 2017-06-17
    • 2017-02-19
    • 2018-01-22
    • 2014-03-19
    • 1970-01-01
    • 2017-08-12
    相关资源
    最近更新 更多