Альтернатива ColdFusion для функции hex2bin PHP

Я хотел бы декодировать двоичную строку в шестнадцатеричном коде; Он будет работать с использованием функции PHP hex2bin. Но мне нужно то же самое в ColdFusion.

PHP

 $key="43480170";

 echo hex2bin($key);

Вывод: CHp

Я пробовал приведенный ниже код. Но этот код ColdFusion не дает мне того результата, который я получил в PHP;

ColdFusion

<cfset key="43480170" />

<cfoutput>#binaryDecode(key, "hex" ).toString()#</cfoutput>

Вывод: различается каждый раз при запуске.

Мне также нужно получить такой же результат, как "CHp" в ColdFusion.


person lambypie    schedule 20.07.2015    source источник
comment
Что значит «не работает»? Вы получаете сообщение об ошибке? Результаты не соответствуют твоим ожиданиям?   -  person Scott Stroz    schedule 20.07.2015
comment
Я не получил ожидаемого значения. Я имел в виду, что получаю другое значение в PHP и Coldfusion.   -  person lambypie    schedule 20.07.2015
comment
Каждый раз по-разному при запуске. FWIW, потому что вызов toString() в массиве байтов возвращает имя класса и хэш-код массива байтов, а не содержимое массива, представленного в виде строки.   -  person Leigh    schedule 20.07.2015


Ответы (2)


Вам необходимо использовать предоставленную ColdFusion функцию для преобразования двоичного представления в строку с использованием toString(xxx), а не базовой java-функции xxx.toString(), поскольку обе будут отображать разные результаты. Это звучит странно, но это не так, java - это жестко типизированный язык, вы не можете просто преобразовать двоичные данные в такое строковое представление, обратитесь к этому сообщению. Кроме того, если бы вы заметили в исходном CF-коде, результат каждый раз будет другим, когда вы его запускаете.

Возвращаясь к вашей проблеме, вам просто нужно немного изменить, и все работает нормально:

<cfset key="43480170" />
<cfoutput>#toString(binaryDecode(key, "hex" ))#</cfoutput>

Вы можете запустить код здесь, чтобы проверить разницу в выводе между двумя подходами. .

Обновлять:

Следуя полезному комментарию @Leigh о рекомендуемом способе преобразования двоичного кода в строку с использованием тега _ 4_, код приведет к следующему:

<cfset key="43480170" />
<cfoutput>#CharsetEncode(binaryDecode(key, "hex" ),'utf-8')#</cfoutput>

Вы можете проверить обновленную суть с изменениями.

person Anurag    schedule 20.07.2015
comment
Боковое примечание: в документации рекомендуется использовать charsetEncode (), а не toString () для новых приложений. - person Leigh; 20.07.2015
comment
Это действительно полезная информация, которая вылетела из головы. Думаю, я обновлю ответ таким же образом. Большое спасибо @Leigh. - person Anurag; 20.07.2015

Вы очень близки. Это должно помочь.

<cfset key="43480170">
<cfoutput>#toString(binaryDecode(key, "hex" ))#</cfoutput>

Возвращает CHp

person John Whish    schedule 20.07.2015