Как преобразовать строку 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);