我想使用PHP将字节数组转换为UINT64。
我可以在C#中轻松地做到这一点,但我想在PHP中做到这一点。
这是C#代码。
bytes = Encoding.UTF8.GetBytes(hashed);
BitConverter.ToUInt64(bytes, 0);
我想将其转换为PHP。
我尝试使用pack()
函数,但这不起作用。
假设这是一个字节数组。
$bytes = [101,102,54,55,99,55,56,49];
pack("J*","101","102","54","55","99","55","56","49");
这显示警告。
epack():在线上未使用7个参数
我该如何解决?
答案 0 :(得分:0)
这里的主要问题(如果我理解正确的话)是您使用PHP数字表示字节数组,但是unpack
需要输入字符串。如果您将数组保持原样,则PHP似乎只是将数字转换为字符串,这意味着101将会是'101',而这又是3个字节,这会破坏整个体系。
您需要首先将数字转换为字节。字节本质上是一个unsigned char
,因此您可以先将数组打包成无符号字符,然后再将它们解压缩:
$bytes = [101,102,54,55,99,55,56,49];
$unpacked = unpack("J", pack('C*', ...$bytes));
echo current($unpacked);
说明:
C
是未签名字符的打包代码,*
指示您需要使用所有数组条目。这将基于数组生成字符串。然后,您可以使用J
(如果您知道字节是按大端字节顺序生成的事实)解包此字符串,或者如果您知道字节是按小端顺序或{ {1}}(如果要使用机器订单)。如果字节是在同一台计算机上生成的,那么P
可能比Q
更好,否则您需要知道字节序。
示例:http://sandbox.onlinephpfunctions.com/code/5cba2c29522f7b9f9a0748b99fac768012e759ce
注意:这是我对正在发生的事情的个人理解,因此,任何具有更好包装/拆箱知识的人都可以让我知道我是否做错了事。