如何解决如何将char数组转换为以十六进制表示其值的字符串?
我正在尝试将字符数组转换为十六进制数组。 输入数组中的每个字符都将转换为代表相应十六进制数字的两个字符。
这是我的输入内容
char input[3] = "over";
这将是输出:
char output[6] = "6f766572";
在没有库的情况下如何在C中实现此转换?预先感谢。
我的代码当前如下:
void convert(char *input,int inputsize) {
char c;
char output[inputsize * 2];
for (int i = 0; i < inputsize; i++) {
c = input[i]
// change c to hex here
// put each letter of the hex into output[i * 2] and output[i * 2 + 1]
}
}
解决方法
- 创建一个循环,直到在输入缓冲区中找到
\0
为止。 - 对于输入字符串中的每个字符编号
[i]
,请屏蔽掉该字节的上下半字节。确保使用无符号类型。 - 通过诸如
const char HEX_LOOKUP [16] = "0123456789ABCDEF";
之类的查找表运行两个半字节中的每个半字节,其中半字节的值用作索引。 - 将结果存储在输出索引
[i*2]
和[i*2+1]
中,因为输出将恰好是输入的两倍。 - 空终止输出字符串。
如果您不想使用库函数,则必须自己构建一个简单的查找表:
#include <stdio.h> // only for printing the result
const char table[] = "0123456789abcdef";
int main(void) {
char src[5 + 1] = "hello";
char dst[5 * 2 + 1];
char *s,*d;
for (s = src,d = dst; *s != '\0'; s++,d += 2) {
const unsigned char lo = *s & 0xf;
const unsigned char hi = *s >> 4;
*d = table[hi];
*(d + 1) = table[lo];
}
*d = '\0';
puts(dst);
return 0;
}
,
您可以尝试以下一种方法:
pack1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。