gpt4 book ai didi

c++ - 安全地在 unsigned 和 signed int 之间转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:20 26 4
gpt4 key购买 nike

我在客户端和服务器之间有一个接口(interface),客户端发送 (1) 一个无符号值,和 (2) 一个标志,指示值是否有符号/无符号。然后服务器会将无符号值静态转换为适当的类型。

我后来发现这是实现定义的行为,我一直在阅读它,但我似乎无法找到一个完全安全的合适解决方案?我读过有关类型双关、指针转换和 memcpy 的内容。

简单地使用 union 类型行得通吗?包含有符号和无符号 int 以及有符号/无符号标志的 UnionType。对于带符号的值,客户端设置 union 的带符号部分,服务器读取带符号的部分。未签名部分相同。还是我完全误解了什么?

附带问题:我如何知道在这种情况下针对特定场景的特定行为,例如PPC 上的 windriver diab?我对如何找到此类文档有点迷茫。

最佳答案

union 解决方案将要求您让客户端和服务器都使用相同的表示,这不是一个好主意。 (例如大端和小端系统都很常见)。

您应该以某种方式序列化该值。但是您只需为每种类型分别执行此操作。

例如(伪代码)

void send_signed(int32_t x)
{
send(1, "s");
send(sizeof x, serialized x);
}

void send_unsigned(uint32_t x)
{
send(1, "u");
send(sizeof x, serialized x);
}

在接收器上;您先阅读类型。如果它是“s”,那么你反序列化一个带符号的 int 等等;如果它是“u”,那么你反序列化一个 unsigned int(到一个不同的变量中)并用它做一些事情。

关于c++ - 安全地在 unsigned 和 signed int 之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24198112/

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