gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:06 39 4
gpt4 key购买 nike

最初我想将这个 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/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com