C++ 帮助将字符串转换为 uint8_t

C++ Help converting string to uint8_t

我目前正在使用一个嵌入式系统,该系统将使用串行通信与各种设备进行通信。我为嵌入式板发送和接收的缓冲区使用了一个 uint8_t 变量。我需要修改这些值(最好使用 string),然后在修改后将它们转换回 uint8_t。我创建了一个简单的测试代码来搞乱 uint8_tstrings。我遇到的问题是 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

regardless of the value of myString, it is always only 4 characters for some reason

检查 sizeof(p) 的值。使用 cout 打印它。它是指针的大小。在您的平台上 4

正如 @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;

p是指针。 当您对指针使用 sizeof() 时,您将获得 4 或 8。这取决于您使用的体系结构。对于 x86 - 4、x64 - 8。

myString.assign(p, p + sizeof(p));// assign first 4 symbols to the string