我会尝试将一个uint8_t数组[uint8_t lets_try[16]]翻译成一个由16*8+1[空字符]元素组成的字符串。例如:
lets_try[0] = 10101010
lets_try[1] = 01010101
我希望能得到类似以下字符串:
1010101001010101...[\0]
这里有问题:1)有没有快速的方法来执行此操作?
我试着自己做;我的想法是从将单个uint8_t变量转换为字符串开始,并使用循环获得完整数组[我还没有完成这最后一部分]。最后我写了这段代码:
int main()
{
uint8_t example = 0x14;
uint8_t *pointer;
char *final_string;
pointer = &example;
final_string = convert(pointer);
puts(final_string);
return(0);
}
char *convert (uint8_t *a)
{
int buffer1[9];
char buffer2[9];
int i;
char *buffer_pointer;
buffer1[8]='\0';
for(i=0; i<=7; i++)
buffer1[7-i]=( ((*a)>>i)&(0x01) );
for(i=0; i<=7; i++)
buffer2[i] = buffer1[i] + '0';
buffer2[8] = '\0';
puts(buffer2);
buffer_pointer = buffer2;
return buffer_pointer;
}
以下是需要翻译的内容:
2) 我不确定我完全理解我在线上找到的这个表达式中的奥妙: buffer2[i] = buffer1[i] + '0'; 能否有人解释一下为什么没有+' 0',下面的puts(buffer2) 不会正确工作?是因为空字符使puts()知道它正在打印一个真正的字符串吗?
3) 在上面的代码中,puts(buffer2) 给出了正确的输出,而主函数中的puts却没有任何输出;我对代码进行了反复查找,但找不出问题在哪里。
4) 在我的解决方案中,我设法将uint8_t转换为字符串,通过int数组: uint8_t-> int array-> string; 是否有一种方法可以缩短这个过程,直接从uint8_t传递到字符串,或者改进它?[在论坛中我只找到了C ++的解决方案]它可以工作,但我觉得有点重,不太优雅。
感谢大家的支持。
convert
调用了未定义的行为,因为它返回一个本地数组。你应该使用malloc
。 - mch