【发布时间】:2014-08-03 14:06:19
【问题描述】:
我在客户端和服务器之间有一个接口,客户端发送 (1) 一个无符号值,和 (2) 一个指示值是否有符号/无符号的标志。然后服务器会将无符号值静态转换为适当的类型。
我后来发现这是实现定义的行为,我一直在阅读它,但似乎找不到完全安全的合适解决方案?我读过类型双关语、指针转换和 memcpy。
简单地使用联合类型会起作用吗?一个包含有符号和无符号整数以及有符号/无符号标志的 UnionType。对于签名值,客户端设置联合的签名部分,服务器读取签名部分。未签名部分也是如此。还是我完全误解了什么?
附带问题:我如何知道在这种情况下针对特定场景的特定行为,例如PPC上的windriver diab?我对如何找到这样的文档有点迷茫。
【问题讨论】:
-
除非您遇到使用诸如补码或符号幅度之类的系统,否则我认为您使用的所有内容都将以相同的方式定义无符号->有符号转换。
-
当客户端发送无符号值但发送有符号标志时会发生什么?
-
另外,您的代码是如何处理签名标志的? (由于 C++ 有一个静态类型系统,你需要在编译时分配你的类型)
-
@user2357112,这是否意味着对于二进制补码系统,static_cast
(static_cast (x)) == x 总是成立? -
@MattMcNabb,理想情况下服务器将 static_cast
(unsigned_value) 并获得预期的签名值。还是您指的是发送联合类型的情况?签名标志只是一个布尔值,不确定我是否正确理解了您的第二个问题 - 刚刚编辑的争论
标签: c++ types casting int unsigned