c++ - 是否有任何中间件/库可以将您的二进制或文本数据从 64 位转换为 32 位?

标签 c++ 64-bit 32bit-64bit porting migrate

<分区>


要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 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 位

有关更多信息,请阅读 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)


二进制也只是一系列位,不一定是恒定宽度的 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/

上一篇:c++ - "natural_alignment_of"类型特征?

下一篇:c++ - 无法加载, undefined symbol C++ 名称修改

相关文章:

c++ - 强制 "in-place" build

c++ - c++ 取消引用分配是否按位或 "smart"分配?

javascript - 将 64 位小端整数转换为数字

msbuild - 为什么64位MSBuild加载32位扩展?

ios - 使用 Accelerate 框架 32 位与 64 位在 swift 中进行矩阵乘法

c++ - long int* 到 np_intp* 平台相关转换

c++ - OpenCV 二进制自适应阈值 OCR

c++ - 如何创建基于类型的查找表以在 C++ 中实现多重调度?

c - 在没有 C 运行时的情况下使用 64 位整数 - 链接错误 __alldiv

c++ - 如何确定处理器是 32 位还是 64 位?双核处理器是 32 位还是 64 位?