将字节数组打包成UINT64
Pack Convert byte array into UINT64
我想使用 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 arguments unused on line
我该如何解决这个问题?
这里的主要问题(如果我理解正确的话)是您使用 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
是unsigned char的打包码,*
表示需要使用所有的数组项。这将根据数组生成一串字符。然后,您可以使用 J
(如果您知道字节是按大端字节顺序生成的事实)或 P
(如果您知道字节是按小端字节顺序生成的)或 Q
如果要使用机器命令。如果字节是在同一台机器上生成的,那么 Q
可能比 J
更好,否则你需要知道字节顺序。
示例:http://sandbox.onlinephpfunctions.com/code/5cba2c29522f7b9f9a0748b99fac768012e759ce
注意:这是我个人对正在发生的事情的理解,所以如果我有什么不对的地方,pack/unpack 知识渊博的人可以告诉我。
我想使用 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 arguments unused on line
我该如何解决这个问题?
这里的主要问题(如果我理解正确的话)是您使用 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
是unsigned char的打包码,*
表示需要使用所有的数组项。这将根据数组生成一串字符。然后,您可以使用 J
(如果您知道字节是按大端字节顺序生成的事实)或 P
(如果您知道字节是按小端字节顺序生成的)或 Q
如果要使用机器命令。如果字节是在同一台机器上生成的,那么 Q
可能比 J
更好,否则你需要知道字节顺序。
示例:http://sandbox.onlinephpfunctions.com/code/5cba2c29522f7b9f9a0748b99fac768012e759ce
注意:这是我个人对正在发生的事情的理解,所以如果我有什么不对的地方,pack/unpack 知识渊博的人可以告诉我。