将 uint8_t 数组转换为 c 中的 char 数组

标签 c arrays hash

最初我想将这个 uint8_t 数组转换为 c 中的 char 数组。我在尝试解决这个问题时遇到了一些困难。我的第一个替代解决方案是将另一个类型值复制到临时值,将 tmp 值复制到可写 char,然后从内存中删除 tmp 值。顺便说一句,这用于伴随 blake 哈希函数。这是我的代码片段:

char * bl(char *input)
{
    uint8_t  output[64];
    char msg[]= "";
    char *tmp;

    int dInt;

    memset(output,0,64);
    tmp = (char*) malloc(64);
    if (!tmp){
            exit( 1);
    }

    dInt = strlen(input);

    if (dInt > 0xffff){
            exit( 1);
    }
    uint8_t data[dInt];

    memset(data,0, dInt);
    strlcpy(data,input,dInt);
    uint64_t dLen =dInt;
    blake512_hash(output, data,dLen);

    int k;
    for (k=0;k<64;k++){
            tmp[k] = output[k];  //does this "copy" is buggy code?
    }

    memcpy(msg, tmp,64);
    //so here I can to delete tmp value
    // I dont want there were left unused value in memory
    // delete tmp;  
    free(tmp);

    return  msg;
}

我认为上面的代码仍然效率不高,那么您有什么意见、提示和修复方法? 之前非常感谢!

最佳答案

首先,您永远不应该返回指向局部变量的指针,因为该变量将在函数退出时被销毁。您可能希望将输出数组传递给 bl 函数并使用它来输出字符串。

对于大多数情况(如果 uint8_t 是 char,通常是这种情况),memcpy(msg, output, 64) 应该就足够了。如果你想对其严格(坦率地说,如果你期望 char 数组作为一直输出),您可以简单地在 for 循环中调用 msg[k] = (char)tmp[k] 并删除 memcpy

关于将 uint8_t 数组转换为 c 中的 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201842/

相关文章:

javascript - Javascript 中数组的三向比较函数

javascript - 通过这种方式使用shortid.generate()设置 react 键唯一?

java - 检查两个图像文件是否相同..校验和或哈希?

连接到本地主机 :30000 refused even though I know it's listening

c - 执行后台进程并从父级检查状态

c - 如何使用C程序查找可移动设备的序列号

c++ - 如何在大量无损压缩图像中提取重复图像对(完全相同)?如何 std::hash 在内存中?

c - 检索 PID 时 pclose 随机出现段错误

php - 使用PHP将Mysql Select转换为独立于级别的目录结构的多维数组

c# - Dictionary<myField, myObject> 其中 myField 是 myObject 的成员