我正在将十六进制字节转换为字符串并通过uart将它们发送到计算机上的终端。我收到奇怪的(几乎正确的)输出,我无法弄清楚为什么。这一切都在AVR中完成。以下是相关的代码段:
while(true)
{
wan_usart_transmit_string(generateString());
}
生成字符串:
char *generateString()
{
char *c = "";
char d[5];
sprintf(d, "%02X", 0x61);
c = strcat(c, d);
return c;
}
wan_usart_transmit_string:
void wan_usart_transmit_string(char * data)
{
unsigned char c = *data;
while (c)
{
while (!(UCSR0A & (1 << UDRE0)));
UDR0 = c;
c = *(++data);
}
}
输出:61611611116111111116161161111611111111 ......等......
generateString方法最终将向前看这么多位置到循环缓冲区中,并将到该位置的所有ASCII值连接成一个字符串,随后将通过USART发送。所以它现在看起来有点时髦。这只是一个测试片段,以确保它在我动态运行之前正确运行。
答案 0 :(得分:1)
您需要为要从generateString()返回的字符串分配一些内存。
目前,您将c char* c = ""
指向字符串文字,然后尝试写入它,从而导致未定义的行为。
使用malloc:
char *c = malloc(sizeof( *c )*10);
c[0] = '\0'; //nul terminate so you get an empty string
char d[5];
sprintf(d, "%02X", 0x61); //you can sprintf directly into c
c = strcat(c, d);
return c;
答案 1 :(得分:-1)
我能够通过在generateString方法中使用以下代码来获取我正在寻找的输出:
char *generateString(){
char *c;
char d[5];
sprintf(d, "%02X", 0x61);
return c;
}