我目前正在使用嵌入式系统,该系统将使用串行通信与各种设备进行通信。我使用uint8_t
变量作为嵌入式板发送和接收的缓冲区。我需要修改这些值(最好使用string
),然后在修改后将它们转换回uint8_t
。我创建了一个简单的测试代码,用于处理uint8_t
&{39}和strings
。我遇到的问题是cout
的输出只显示" GREE" (无论myString
的值如何,由于某种原因,它总是只有4个字符)。我已经尝试了几种方法来完成这项任务,并且非常感谢一些帮助。也许我错过了一些容易修复的东西?我已经在电脑上待了将近8个小时。
string myString = "GREETINGS";
const uint8_t *p = reinterpret_cast<const uint8_t*>(myString.c_str());
myString.assign(p, p + sizeof(p));
cout << myString << endl;
输出是:GREE
答案 0 :(得分:2)
无论myString的值如何,由于某种原因它总是只有4个字符
检查sizeof(p)
的值。使用cout
打印。它是指针的大小。它是您平台上的4
。
答案 1 :(得分:0)
p是指针。 当你使用sizeof()作为指针时,你会得到4或8.这取决于你使用的架构。对于x86 - 4,x64 - 8。
myString.assign(p, p + sizeof(p));// assign first 4 symbols to the string
答案 2 :(得分:-2)
正如 @Drew Dormann 指出的那样(双关语):p
是一个大小为sizeof(p)
的指针。指针的大小是系统规范,在您的系统上似乎是4个字节。 char
是1个字节,因此您看到4个chars
。
所以,我们必须改变大小:
string myString = "GREETINGS";
const uint8_t *p = reinterpret_cast<const uint8_t*>(myString.c_str());
myString.assign(p, p + myString.size());
cout << myString << endl;