【发布时间】:2013-05-07 07:26:33
【问题描述】:
我正在尝试将 ASCII 中的 char[] 转换为十六进制的 char[]。
类似这样的:
你好 --> 68656C6C6F
我想通过键盘读取字符串。长度必须为 16 个字符。
这是我现在的代码。我不知道如何进行该操作。我读过 strol 但我认为它只是将 str 数字转换为 int hex...
#include <stdio.h>
main()
{
int i = 0;
char word[17];
printf("Intro word:");
fgets(word, 16, stdin);
word[16] = '\0';
for(i = 0; i<16; i++){
printf("%c",word[i]);
}
}
我使用 fgets 是因为我的阅读效果比 fgets 好,但如果需要我可以更改它。
与此相关,我正在尝试将读取的字符串转换为 uint8_t 数组,将每 2 个字节合二为一以获得十六进制数。
我有这个函数,我在 arduino 中使用了很多,所以我认为它应该可以在正常的 C 程序中正常工作。
uint8_t* hex_decode(char *in, size_t len, uint8_t *out)
{
unsigned int i, t, hn, ln;
for (t = 0,i = 0; i < len; i+=2,++t) {
hn = in[i] > '9' ? (in[i]|32) - 'a' + 10 : in[i] - '0';
ln = in[i+1] > '9' ? (in[i+1]|32) - 'a' + 10 : in[i+1] - '0';
out[t] = (hn << 4 ) | ln;
printf("%s",out[t]);
}
return out;
}
但是,每当我在代码中调用该函数时,都会出现分段错误。
将此代码添加到第一个答案的代码中:
uint8_t* out;
hex_decode(key_DM, sizeof(out_key), out);
我尝试传递所有必要的参数并输入我需要的数组,但它失败了......
【问题讨论】:
-
uint8_t* out;-->uint8_t* out = calloc(sizeof(out_key), sizeof(*out));或strlen(key_DM)+1而不是sizeof(out_key)。