繁体   English   中英

将ASCII字符数组转换为十六进制字符数组

[英]Convert ASCII Char Array to Hex Char Array

我正在尝试将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};

可以很好地工作。

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";

给定或取一个从有符号的char到无符号的char的强制转换,以及一个可以安全忽略的尾随零字节。

无需编写循环,调用printf()或进行任何转换。

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

在循环结束时, output_char如下所示:

"30313233343536373839414243444546"

或者,至少如果阵列足够大以容纳它,它将只是所需大小的一半。 您可以通过写入数组末尾来调用未定义的行为

但是, ascii_char 已经采用了output_char所需的格式。 无需进行任何转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM