Как преобразовать строку Windows-1251 в HEX в PHP

У меня есть строка в кодировке Windows 1251, которую необходимо преобразовать в HEX или двоичный файл (но если мне удастся преобразовать ее в одну из двух, я смогу преобразовать ее в другую). Строка поступает из кассового аппарата, поэтому я ничего не могу сделать с начальной кодировкой.

До сих пор я пытался преобразовать его в UTF-8, затем в bin и затем в hex, но в конце это просто не правильно. Строка "Ђ €„, которая в шестнадцатеричном виде равна 80 20 80 80 84 82, а в двоичном виде она должна быть 10000000 10100000 10000000 10000000 10000100 10000010

Я думаю, что моей первой проблемой является разговор win-1251 to utf-8.

$decodedUtf8 = mb_convert_encoding($decoded, "utf-8", "windows-1251");

Результатом этого является '' -> '->', и у меня нет опыта кодирования, но этот выглядит подозрительно.

Пока весь мой код таков:

public function decodeStatus($encodedStr){
        $decoded = base64_decode($encodedStr);
        //$iconverted = iconv('cp1251', 'utf-8', $decoded);

        $decodedUtf8 = mb_convert_encoding($decoded, "utf-8", "windows-1251");
        echo $decodedUtf8;

        $chars = str_split($decodedUtf8);
        foreach ($chars as $char){
            $bits[] = decbin(ord($char));
        }
       return $bits;
    }

Конечный массив должен состоять из 6 элементов:

[
    1000000,
    10100000,
    10000000,
    10000000,
    10000100,
    10000010
]

Есть ли способ конвертировать его только с помощью PHP? И можете ли вы дать мне несколько указаний, как это сделать?

1 ответ

Происхождение / кодировка не имеет значения для преобразования строки (bin) в строку HEX. Это еще одна запись для вашей строки:

$inputString = "\x80\x20\x80\x80\x84\x82";

Используйте для преобразования в шестнадцатеричный bin2hex:

$hexString = bin2hex($inputString);

var_dump($hexString);
//string(12) "802080808482"

Изменить: Для преобразования в Bin вы можете использовать свой скрипт без функций кодирования / декодирования. Другой вариант:

$input = "\xd0\x82\xc2\xa0\xd0\x82\xd0\x82\xe2\x80\x9e\xe2\x80\x9a";

var_dump(bin2hex($input)); //string(28) "d082c2a0d082d082e2809ee2809a"

$binArray = [];
for($i=0; $i<strlen($input);$i++){
  $binArray[] = sprintf("%08b",ord($input[$i]));
}
var_dump($binArray);
Другие вопросы по тегам