2016-12-02 197 views
-3

我想做一个函数,将无符号字符转换为无符号整型并将其存储到数组中。但是,这最终会出现一个错误,说将无符号字符(数组)转换为无符号整数(数组)

将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; 
} 
+0

你想16个整数元素的数组,每个元素只保存一个数字吗? – Rorschach

+3

'sprintf'将整数转换为字符表示,而不是其他方式 –

+0

A [*** *** sprintf'和'printf'的很好参考](http://en.cppreference.com/w/ c/io/fprintf)应该会有所帮助。 –

回答

1

正如评论已经说了,你必须在你的代码的问题......所有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; 
} 
+0

尽管'unsigned'与'unsigned int'相同,后者更清晰。你也不应该使用malloc http://stackoverflow.com/a/605858/4805077 – saeleko

+0

@LudaOtaku同意'unsigned int'。我甚至第一次写它,然后修改它使其缩短。对我来说这似乎更加清楚。感谢您提供关于'malloc'的提示! – Rorschach

+0

我曾经单独编写'unsigned',无论如何它主要是一个品味问题,但是它让阅读代码更加愉快,在它旁边有一个小的'int'。并欢迎您使用malloc! 'void *'指针是C的一个非常有趣的方面。不管怎样,你可能不想指向指针,总会有截断地址的风险,这就意味着地平线上的麻烦。 – saeleko

相关问题