将无符号字符(数组)转换为无符号整数(数组)
我想做一个函数,将无符号字符转换为无符号整型并将其存储到数组中。但是,这最终会出现一个错误,说将无符号字符(数组)转换为无符号整数(数组)
将sprintf的参数1从不兼容的指针类型中传递。
int main(void) {
unsigned char key[16] = "1234567812345678";
phex(key, 16); //store into an array here
}
uint64_t* phex(unsigned char* string, long len)
{
uint64_t hex[len];
int count = 0;
for(int i = 0; i < len; ++i) {
count = i * 2;
sprintf(hex + count, "%.2x", string[i]);
}
for(int i = 0; i < 32; i++)
printf(hex[i]);
return hex;
}
正如评论已经说了,你必须在你的代码的问题......所有sprintf
功能 首先做的你想/希望它做的事情完全相反的事。接下来,在函数中创建一个局部变量,并返回指向它的指针。函数退出后,指针无效。第三个问题,我看到的是,你永远不指定返回值什么...就如何解决你的代码
命题:
unsigned* phex(unsigned char* string, long len);
int main(void) {
int i;
unsigned char key[16] = "1234567812345678";
unsigned* ints = phex(key,16); //store into an array here
for(i = 0; i < 16; i++)
printf("%d ", ints[i]);
//never forget to deallocate memory
free(ints);
return 0;
}
unsigned* phex(unsigned char* string, long len)
{
int i;
//allocate memory for your array
unsigned* hex = (unsigned*)malloc(sizeof(unsigned) * len);
for(i = 0; i < len; ++i) {
//do char to int conversion on every element of char array
hex[i] = string[i] - '0';
}
//return integer array
return hex;
}
尽管'unsigned'与'unsigned int'相同,后者更清晰。你也不应该使用malloc http://stackoverflow.com/a/605858/4805077 – saeleko
@LudaOtaku同意'unsigned int'。我甚至第一次写它,然后修改它使其缩短。对我来说这似乎更加清楚。感谢您提供关于'malloc'的提示! – Rorschach
我曾经单独编写'unsigned',无论如何它主要是一个品味问题,但是它让阅读代码更加愉快,在它旁边有一个小的'int'。并欢迎您使用malloc! 'void *'指针是C的一个非常有趣的方面。不管怎样,你可能不想指向指针,总会有截断地址的风险,这就意味着地平线上的麻烦。 – saeleko
你想16个整数元素的数组,每个元素只保存一个数字吗? – Rorschach
'sprintf'将整数转换为字符表示,而不是其他方式 –
A [*** *** sprintf'和'printf'的很好参考](http://en.cppreference.com/w/ c/io/fprintf)应该会有所帮助。 –