gpt4 book ai didi

c++ - 在 C++ 中从 size_t 转换/转换为 uint8_t?

转载 作者:行者123 更新时间:2023-11-28 03:45:33 32 4
gpt4 key购买 nike

我正在尝试编写一些代码,使用 boost::asio 的套接字从一端(客户端)向另一端(服务器)发送消息。

我现在的特定目标是在发送的每条消息前加上一个 1 字节无符号整数 (uint8_t),告诉接收方消息的其余部分有多少字节长。

请注意,我将大小存储和传输为 uint8_t 而不是 size_t 的原因是因为我想确保它在两台机器上都正好是 1 个字节。一点谷歌搜索表明 size_t 在机器 A 和机器 B 上的大小可能不同,这可能会把事情搞砸。

所以我在这里计算消息的长度。该消息仅由两部分组成:一个 uint16_t,后跟一个变量“data”,它是一个 (void*)-cast 内存块,将用于不同的目的(目标机器有解释该数据的方法,但我不会此处不赘述)。

uint8_t sizeOfMessage = sizeof(uint16_t) + sizeof(data);

在此示例中,sizeof(data) == 4,因此 sizeOfMessage 应等于 6(因为 uint16_t 是一个 2 字节整数)。但是,如果我 std::cout << sizeOfMessage,显示的不是 6,而是一个特殊字符:黑桃(如纸牌花色)。查看 VS2010 调试器中的数据,它显示为 6 '-' 。但是,如果我将 sizeOfMessage 定义为 size_t 并将其打印出来,一切都很好(但当然,我不能通过网络发送它,因为不能保证从一台机器到另一台机器的 size_t 的字节大小)。

我认为这意味着在算术之后将 size_t 转换为 uint8_t 的方式出了问题。 sizeof 返回一个 size_t,所以我的代码所做的是添加两个 size_t,然后将其转换为 uint8_t。

我的结论是否正确,即未正确转换值?如果是这样,我该如何解决?

提前致谢。

最佳答案

分配给您的小 (uint8_t) 变量的值不是显示为“6”的可打印 ASCII 字符代码。相反,它是一个二进制值,相当于在您的源代码中编码 '\006'。如果您的数据传输协议(protocol)确实适用于二进制代码字节,那么您就可以开始了。接收程序在其读取一个字节 (char) 的 (uint8_t) 实例中得到什么?当然,使用 (uint8_t) 会将您的总消息长度限制在 0 到 255 之间(但您知道这一点)。

关于c++ - 在 C++ 中从 size_t 转换/转换为 uint8_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7815435/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com