我们在前端(Windows32位)和后端(Linux64位)都使用C++。它们可以传递二进制或文本数据进行通信。有没有中间件/库可以将这些数据从64位转换到32位?或者是更改代码的唯一选择?
发布于 2013-12-06 13:23:29
没有像“64位文本数据”这样的东西。文本文件只包含某种编码形式的字符。而且目前还没有可用的64位编码。最长的固定宽度编码是UTF-32,它是32位长。对于可变长度编码,UTF-8的最大长度为6字节长(编辑:由于Unicode的范围是restricted to U+10FFFF,它已被正式命名为limited to 4 bytes only ),其他编码的长度也不同,但都不超过8字节长。如果存在差异,则需要将编码转换为32位,而不是64位
二进制也只是一系列位,不一定是恒定宽度的64位或32位数组,尽管在现代计算机体系结构中,大小是字节的倍数。您需要完全按照写入的方式读取数据。如果您写入64位值,请将其作为64位值读取,而不管是16位、32位还是64位程序。如何确保64位写入的数字在裁剪为32位时不会溢出?
如果你使用的是MSVC,那么在32位和64位模式下,除了指针之外,字体大小是相同的,因此,如果你坚持使用标准,就不需要修改代码。在大多数其他64位平台上,如果您使用long,您可能需要小心,因为它比32位程序更广泛。
最好在跨平台代码中使用C++11的标准类型,如cstdint中的intN_t。在C++11和C99之前,许多库和编译器也定义了自己的标准固定宽度整数类型,例如qint32 in Qt和__int32 in MSVC
https://stackoverflow.com/questions/20415537
复制相似问题