PHP-读取8位整数

PHP-读取8位整数,php,binary,integer,pack,unpack,Php,Binary,Integer,Pack,Unpack,我有一个二进制文件,全部是8位整数。我曾尝试使用php unpack()函数,但我无法获得任何用于1字节整数的参数。我已尝试将数据与伪字节组合,以便使用'n'/'v'参数。我正在使用windows计算机来完成这项工作。最后,我想要一个函数返回一个基于8位二进制整数字符串的整数数组。我试过的代码如下- $dat_handle = "intergers.dat"; $dat_file = fopen($dat_handle, "rb"); $dat_data = fread($dat_file, 1

我有一个二进制文件,全部是8位整数。我曾尝试使用php unpack()函数,但我无法获得任何用于1字节整数的参数。我已尝试将数据与伪字节组合,以便使用'n'/'v'参数。我正在使用windows计算机来完成这项工作。最后,我想要一个函数返回一个基于8位二进制整数字符串的整数数组。我试过的代码如下-

$dat_handle = "intergers.dat";
$dat_file = fopen($dat_handle, "rb");
$dat_data = fread($dat_file, 1);
$dummy = decbin(0);
$combined = $dummy.$dat_data;
$result = unpack("n", $combined);

以下操作应满足您的要求():


您试图做的是检索单个字节的整数值。因为一次读取的是单个字节,所以始终只有一个有效的ASCII字符
ord
返回该字符的二进制值。

您要查找的是char数据类型。现在有两种版本,有符号(小写
c
)和无符号(大写
c
)。只需使用一个适合您的数据

<?php
    $byte = unpack('c', $byte);
?>

此外,如果数据文件只是一堆字节,没有其他内容,并且您知道它的长度,那么您可以这样做。(如果长度为一行16个有符号字符。)


如果您不知道文件中有多少字节,但您知道只有字节,您可以使用星号代码读取,直到EOF

<?php
    $bytes = unpack('c*', $byte);
?>


“n”
是无符号的短字符--16位。当然,如果您将8位int作为16位int读取,那么读取8位int将失败;)。尝试
unpack(“c”,合并美元)@Frank他的想法是正确的(假设数据没有签名),他的执行是错误的。他正在准备
'0'
而他应该准备
chr(0)
。尽管如此,这仍然是错误的做法!你说得对:decbin返回一个包含字符“0”的PHP字符串,这根本不是他想要的。
<?php
    $bytes = unpack('c16', $byte);
?>
<?php
    $bytes = unpack('c*', $byte);
?>