<分区>
要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describe the problem以及迄今为止为解决该问题所做的工作。
关闭 9 年前。
<分区>
要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describe the problem以及迄今为止为解决该问题所做的工作。
关闭 9 年前。
我们在前端(Windows 32 位)和后端(Linux 64 位)都使用 C++。他们可以通过二进制或文本数据进行通信。是否有任何中间件/库可以将这些数据从 64 位转换为 32 位?还是更改代码的唯一选择?
最佳答案
没有“64 位文本数据”这样的东西。文本文件仅包含某种编码的字符。目前没有可用的 64 位编码。最长的固定宽度编码是 UTF-32,它是 32 位长。对于可变长度编码,UTF-8 的最大长度为 6 字节(编辑:官方为 limited to 4 bytes only 因为 Unicode 的范围为 restricted to U+10FFFF ),其他数字不同,但没有一个最大为 8 字节长的。如果存在差异,那么您需要转换编码,而不是 64 位到 32 位
二进制也只是一系列位,不一定是恒定宽度的 64 位或 32 位数字数组,尽管在现代计算机体系结构中,大小是字节的倍数。您需要完全按照写入数据的方式读取数据。如果写入 64 位值,无论是 16 位、32 位还是 64 位程序,都将读取为 64 位值。如何确保以 64 位编写的数字在裁剪为 32 位时不会溢出?
如果您使用的是 MSVC,则类型大小在 32 位和 64 位模式下都相同,指针除外,因此如果您坚持标准,则无需更改代码。在大多数其他 64 位平台上,如果您使用 long
,您可能需要小心,因为它比在 32 位程序中更宽。
最好使用 C++11 的标准类型,例如 cstdint
中的 intN_t
在跨平台代码中。在 C++11 和 C99 之前,许多库和编译器也定义了它们自己的标准固定宽度整数类型,例如为了兼容性,qint32 in Qt和 __int32
in MSVC
关于c++ - 是否有任何中间件/库可以将您的二进制或文本数据从 64 位转换为 32 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20415537/