gpt4 book ai didi

用于签名 32 int 的 PHP pack() 格式 - 大端

转载 作者:可可西里 更新时间:2023-11-01 00:14:53 24 4
gpt4 key购买 nike

我正在使用 PHP、fopen、fseek、pack 等创建然后将数据写入文件(一个新的“ESRI Shape 文件”)。文件规范在这里 http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf .

文件规范指出写入的数据需要结合以下内容:

  • 整数:带符号的 32 位整数(4 字节)- Big Endian
  • 整数:带符号的 32 位整数(4 字节)- Little Endian
  • Double:带符号的 64 位 IEEE double float (8 字节)- Little Endian

我似乎找不到允许这些格式的 pack() 格式。我不想使用依赖于机器的格式,因为此代码可能会在各种平台上运行。

有人可以建议我需要为这 3 种格式使用什么格式(或格式组合)吗?

非常感谢,史蒂夫

最佳答案

您可以检查运行代码的机器的字节顺序,并在必要时手动反转字节。下面的代码应该可以工作,但您一次只能转换一个 int 或 float。

define('BIG_ENDIAN', pack('L', 1) === pack('N', 1));

function pack_int32s_be($n) {
if (BIG_ENDIAN) {
return pack('l', $n); // that's a lower case L
}
return strrev(pack('l', $n));
}
function pack_int32s_le($n) {
if (BIG_ENDIAN) {
return strrev(pack('l', $n));
}
return pack('l', $n); // that's a lower case L
}
function pack_double_be($n) {
if (BIG_ENDIAN) {
return pack('d', $n);
}
return strrev(pack('d', $n));
}
function pack_double_le($n) {
if (BIG_ENDIAN) {
return strrev(pack('d', $n));
}
return pack('d', $n);
}

关于用于签名 32 int 的 PHP pack() 格式 - 大端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16039751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com