【问题标题】:C++ Add byte value to CString as intC ++将字节值作为int添加到CString
【发布时间】:2014-05-14 23:41:22
【问题描述】:

让我们首先声明我有 0 xp 的 C++。

我有一个用数据填充的字节数组。

例子:

byte 0: 1
byte 1: 75
byte 2: 125
byte 3: 66
byte 4: 114
byte 5: 97
byte 6: 109

我在 C++ 中有一个 CString,它应该获取所有字节。但是字节 0-2 应该是 int,字节 3-6 应该是 ASCII 字符。

当我读取字节并将它们放入 CString 时,将显示以下内容:

" K}Bram"

只有“Bram”部分是正确的。 输出应该是:

"175125Bram"

我在字节数组的索引上有一个开关,所以我可以控制字节。 对于字节 0-2,我使用以下代码:

receiveStr += "" + (int)buffer[i]);

对于字节 3-6,我使用以下代码:

if ((buffer[i] >= 0x20 && buffer[i] <= 0x7E) || (buffer[i] == '\r') || (buffer[i] == '\n') || (buffer[i] == '\t'))
{
    receiveStr += buffer[i];
}
else
{
    // Display the invalid character placeholder (square)
    receiveStr += (char)0x7F;
}

如何将第一个字节“转换”为 int?

【问题讨论】:

  • 嗯?你在用char吗?不是 unicode?​​span>

标签: c++ int byte bytearray cstring


【解决方案1】:

调用'convert to int'是什么意思?它在输出中应该是什么样子? 您的前 3 个字节已存储为 int 值,但其表示仍为 ascii 字符。

如果它意味着像“175125Bram”这样的字符串,那么解决方案应该是这样的

#include <sstream>

stringstream ss;
ss << buffer[0] << buffer[1] << buffer[2];
receiveStr += ss.str();

【讨论】:

  • receiveStr += ss.str();不可能 += 是 C++ 不同意的东西 ss.str() 不能添加到 CString
  • 然后你可以将所有字节添加到 ss 只需使用
  • 返回字符串为:"K}Bram"
  • 然后试试 ss
【解决方案2】:

有很多方法。也许itoa这个非标准函数是最广为人知的一个。 snprintf/swprintf也可以解决。它们需要一个固定大小的缓冲区,但在这种情况下,也许您可​​以知道合适的大小。

在 C++11 中,有 std::to_string/std::to_wstring 函数。它将数字转换为std::string/std::wstring

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    相关资源
    最近更新 更多