2

我从命令行读取了一个 17 字节的十六进制字符串,"13:22:45:33:99:cd"并希望将其转换为长度为 6 字节的二进制值。

为此,我从命令行读取了一个 17 字节的十六进制字符串,"13:22:45:33:99:cd"并将其转换为二进制数字 0001 0011 0010 0010 0100 0101 0011 0011 1001 1001 1100 1101。但是,由于我使用的是 char 数组,它的长度为 48 个字节。我希望生成的二进制文件的长度为 6 个字节,即,我希望0001 0011 0010 0010 0100 0101 0011 0011 1001 1001 1100 1101为 6 个字节(48 位)而不是 48 个字节。请建议如何做到这一点。

4

3 回答 3

3
#include <stdio.h>

const char *input = "13:22:45:33:99:cd";
int output[6];
unsigned char result[6];
if (6 == sscanf(input, "%02x:%02x:%02x:%02x:%02x:%02x",
                &output[0], &output[1], &output[2],
                &output[3], &output[4], &output[5])) {
    for (int i = 0; i < 6; i++)
        result[i] = output[i];
} else {
    whine("something's wrong with the input!");
}
于 2012-10-12T08:29:16.480 回答
3

在字符上拆分字符串':',每个子字符串现在都是一个字符串,您可以传递给 egstrtoul然后放入unsigned char大小为 6 的数组中。

于 2012-10-12T08:29:24.840 回答
1

你把它们打包在一起。就像高半字节和低半字节一样:((hi<<4)|lo假设两者都是 4 位)。

尽管您可能更喜欢逐字节转换它们,而不是一开始就逐位转换。

于 2012-10-12T08:28:49.340 回答