将ASCII字符数组转换为Hex字符数组

时间:2017-06-15 19:26:24

标签: c arrays string

我正在尝试将ASCII字符串转换为十六进制格式的字符串,如下所示:

这是char数组:“0123456789ABCDEF”// Len = 16

这应该是输出字符:“0x30,0x31,0x32 ......”

我正在尝试这个:

unsigned char* ascii_char;
unsigned char output_char[16];

ascii_char = "0123456789ABCDEF";

int i = 0;

for (i = 0; i < 16; i++)
{    
    sprintf(output_char + i * 2, "%02X", ascii_char[i]);
}

但是期望的反应并不像预期的那样。因为如果我创建一个这样的变量:

unsigned char output_char[16] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46};

工作正常。

2 个答案:

答案 0 :(得分:3)

unsigned char output_char[16] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46};

完全相同

unsigned char output_char[] = "0123456789ABCDEF";

给出或者取一个从signed到unsigned char的转换,以及一个可以安全忽略的尾随零字节。

无需编写循环,调用printf()以及转换任何内容。

答案 1 :(得分:0)

您正在做的是获取一个已存储为十六进制的字符数组,并将其转换为十六进制代码的文本表示

在循环结束时,output_char看起来像这样:

"30313233343536373839414243444546"

或者至少如果阵列足够大以容纳它,但它只是所需大小的一半。您可以通过写过数组末尾来调用undefined behavior

但是,ascii_char 已经已经output_char所需的格式。没有必要进行任何转换。