zlib 的 "uncompress" 是保留数据的原始字节序,还是进行字节序转换?
Does zlib's "uncompress" preserve the data's original endianness, or does it do an endian conversion?
我正在使用旧版 C++ 代码访问压缩在 sqlite 数据库中的两字节整数数据。该代码使用 zlib 的解压缩函数来提取数据,这些数据在我的小端机器上作为小端值出现。
为了允许将此代码移植到大端机器的可能性,我需要知道数据是否总是以小端顺序解压缩,或者(相反)zlib 是否会以某种方式进行转换。
这是我能够找到的唯一适用的花絮(来自他们网站上的 zlib 常见问题解答):
- Will zlib work on a big-endian or little-endian architecture, and can I exchange compressed data between them?
Yes and yes.
没有真正回答我的问题...如果需要,我准备处理字节序转换。无论您 运行 在哪个平台上解压缩,假设原始输入数据的字节顺序就是您返回的内容是否安全? (我目前无法访问大端机器来自己测试)。
zlib 无损压缩和解压缩字节流。因此,无论输入什么字节序,输出的都是什么。这完全与压缩和解压缩机器的字节顺序无关。
FAQ 条目指的是这样一个事实,即编写的代码对代码编译到的体系结构的字节顺序不敏感,运行。
RFC1950 具体说明了 zlib 的 own 元数据多字节值是如何存储的:
Within a computer, a number may occupy multiple bytes. All multi-byte numbers in the format described here are stored with the MOST-significant byte first (at the lower memory address). For example, the decimal number 520 is stored as:
0 1
+--------+--------+
|00000010|00001000|
+--------+--------+
^ ^
| |
| + less significant byte = 8
+ more significant byte = 2 x 256
因此,关于 internal 使用 zlib 的多字节值的操作必须 考虑字节顺序(这是 FAQ #26 回答的内容).
压缩后的数据本身不会发生变化,因为 zlib 以字节为粒度进行压缩和解压缩,而不是更大的单位。
我正在使用旧版 C++ 代码访问压缩在 sqlite 数据库中的两字节整数数据。该代码使用 zlib 的解压缩函数来提取数据,这些数据在我的小端机器上作为小端值出现。
为了允许将此代码移植到大端机器的可能性,我需要知道数据是否总是以小端顺序解压缩,或者(相反)zlib 是否会以某种方式进行转换。
这是我能够找到的唯一适用的花絮(来自他们网站上的 zlib 常见问题解答):
- Will zlib work on a big-endian or little-endian architecture, and can I exchange compressed data between them? Yes and yes.
没有真正回答我的问题...如果需要,我准备处理字节序转换。无论您 运行 在哪个平台上解压缩,假设原始输入数据的字节顺序就是您返回的内容是否安全? (我目前无法访问大端机器来自己测试)。
zlib 无损压缩和解压缩字节流。因此,无论输入什么字节序,输出的都是什么。这完全与压缩和解压缩机器的字节顺序无关。
FAQ 条目指的是这样一个事实,即编写的代码对代码编译到的体系结构的字节顺序不敏感,运行。
RFC1950 具体说明了 zlib 的 own 元数据多字节值是如何存储的:
Within a computer, a number may occupy multiple bytes. All multi-byte numbers in the format described here are stored with the MOST-significant byte first (at the lower memory address). For example, the decimal number 520 is stored as:
0 1 +--------+--------+ |00000010|00001000| +--------+--------+ ^ ^ | | | + less significant byte = 8 + more significant byte = 2 x 256
因此,关于 internal 使用 zlib 的多字节值的操作必须 考虑字节顺序(这是 FAQ #26 回答的内容).
压缩后的数据本身不会发生变化,因为 zlib 以字节为粒度进行压缩和解压缩,而不是更大的单位。