PHP - читать 8-битные целые числа - PullRequest
2 голосов
/ 29 апреля 2011

У меня есть двоичный файл, который состоит из 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);

Ответы [ 2 ]

4 голосов
/ 29 апреля 2011

То, что вы ищете, это тип данных char.Теперь есть две версии этого, со знаком (строчные буквы c) и без знака (прописные буквы C).Просто используйте тот, который подходит для ваших данных.

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

Кроме того, если файл данных представляет собой просто набор байтов и ничего более, и вы знаете, что его длина, вы можете сделать это.(Если длина строки составляет 16 знаков со знаком).

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

Если вы не знаете, сколько байтов будет в файле, но знаете, что вы можете использовать только байты.код звездочки для чтения до EOF.

<?php
    $bytes = unpack('c*', $byte);
?>
1 голос
/ 29 апреля 2011

Следующее должно делать то, что вы хотите (ord):

$dat_handle = "intergers.dat";
$dat_file = fopen($dat_handle, "rb");
$dat_data = ord(fread($dat_file, 1));

То, что вы пытаетесь сделать, это получить целочисленное значение одного байта. Поскольку вы читаете по одному байту за раз, у вас всегда будет ровно один действительный символ ASCII. ord возвращает двоичное значение этого одного символа.

...