Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > UTF-16 & hex


Автор: _AXE_ 29.12.2007, 14:58
Дан текст: "привет" нужно его преобразовать в "043F04400438043204350442".
Т.е. WINDOWS-1251 => UTF-16 & hex каждого символа в строке, делаю так:
Код

<?php
function asc2bin ($temp) 
{
  $len = strlen($temp);
  for ($i=0; $i<$len; $i++) $data.=sprintf("%x",ord(substr($temp,$i,1)));
  return $data;
}
$a="привет";
$c=iconv("WINDOWS-1251","UTF-16",$a);
$b=asc2bin($c);
echo"$b";

?>



Результат: fffe3f4404384324354424
в чем проблема?

Автор: vasac 29.12.2007, 18:26
1. Вы не проверяете длину получившейся hex-строки и вместо "04" имеете просто "4".
2. Вперед добавлен символ "feff", видимо какая-то сигнатура, указывающая UTF-16
3. У вас походу машина не интеловской архитектуры и старший/младший байты идут в другом порядке. Или еще из-за чего-то. У меня 
Код

fe - ff - 4 - 3f - 4 - 40 - 4 - 38 - 4 - 32 - 4 - 35 - 4 - 42

Автор: _AXE_ 2.1.2008, 19:12
Что предложите? smile 

Автор: kasmanaft 3.1.2008, 14:21
Попробуйте 
Код

sprintf("%02x",ord($temp[$i]))

Автор: FractalizeR 7.1.2008, 19:25
Код

<?php
$orig_text="привет";
$converted_text=iconv("WINDOWS-1251","UTF-16",$orig_text);
$hex_result = '';
for($i=0; $i<strlen($converted_text); $i++) {
  $hex_result .= sprintf("%02x", ord($converted_text[$i]));
}
echo($hex_result);

?>

Автор: _AXE_ 12.1.2008, 09:40
Цитата(FractalizeR @ 7.1.2008,  19:25)
Код

<?php
$orig_text="привет";
$converted_text=iconv("WINDOWS-1251","UTF-16",$orig_text);
$hex_result = '';
for($i=0; $i<strlen($converted_text); $i++) {
  $hex_result .= sprintf("%02x", ord($converted_text[$i]));
}
echo($hex_result);

?>


Результат вашего кода:
fffe3f0440043804320435044204
 smile 

Автор: FractalizeR 12.1.2008, 13:56
Ну убрать надо UTF8 сигнатуру и получится то, что надо. Или нет?

Автор: _AXE_ 21.1.2008, 20:40
Ап темы, ответа не нашел... smile 

Автор: _AXE_ 25.1.2008, 19:11
Я с этим парюсь уже достаточно много времени, хелпsmile

Автор: sTa1kEr 25.1.2008, 19:23
Что-то я видимо не понимаю...
Код

echo bin2hex(mb_convert_encoding("привет", "UTF-16", "Windows-1251"));

Вывод:
Код

043f04400438043204350442


Кстати, зачем свой велосипед, когда есть bin2hex() smile

Автор: _AXE_ 27.1.2008, 01:01
В вот точно! Надо жеsmile Спасибо, +1 однозначно! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)