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

时间:2015-08-04 22:24:37

标签: c++ string int byte

我目前正在使用嵌入式系统,该系统将使用串行通信与各种设备进行通信。我使用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

3 个答案:

答案 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;