【问题标题】:C++ Help converting string to uint8_tC++ 帮助将字符串转换为 uint8_t
【发布时间】:2015-08-04 22:24:37
【问题描述】:

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

输出是:绿色

【问题讨论】:

  • p 是一个指针。 sizeof(p) 将是指针的大小。如果您的字符串包含任意字节,则仅该指针不会知道字符串中包含多少字节。
  • 我确实一直在看电脑太久,以至于错过了类似的东西哈哈!谢谢德鲁,刚刚修好了。让新鲜的眼睛偶尔达到顶峰是值得的。
  • Some say 那个字符串 self-.assign ment 是狡猾的

标签: c++ string int byte


【解决方案1】:

不管 myString 的值如何,由于某种原因它总是只有 4 个字符

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 嗯...sizeof(myString)?严重地?你要重新考虑吗?需要更多时间吗?
      • 你的意思是myString.size()
      • 当你说 "or any pointer" 你忽略了成员函数指针。成员函数指针通常比其他指针大。并且指针是“传统上” 8 个字节。 64 位操作系统已经存在了十多年了...
      • 知道了!感谢您的意见,我希望 Spencer 解决了他的问题!
      • 我对反对票的数量感到困惑。请发表评论
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      相关资源
      最近更新 更多