我想解码十六进制编码的二进制字符串;它将使用PHP的hex2bin函数。但我在ColdFusion中需要相同的东西。
PHP
$key="43480170";
echo hex2bin($key);
输出:CHp
我尝试过以下代码。但是这个ColdFusion代码没有给我结果,因为我在PHP中得到了它;
ColdFusion的
<cfset key="43480170" />
<cfoutput>#binaryDecode(key, "hex" ).toString()#</cfoutput>
输出:每次运行时都不同。
我需要在ColdFusion中获得与' CHp '相同的结果。
答案 0 :(得分:2)
您需要使用ColdFusion提供的函数将二进制表示转换为使用toString(xxx)
的字符串而不是基础java函数xxx.toString()
,因为它们将呈现不同的结果。这听起来很奇怪但不是,java是硬类型语言,你不能简单地将二进制数据转换为字符串表示,refer to this post。此外,如果您在原始CF代码中注意到,每次运行时输出都是不同的。
回到你的问题,你只需做一点改变就可以了:
<cfset key="43480170" />
<cfoutput>#toString(binaryDecode(key, "hex" ))#</cfoutput>
您可以run the code here检查两种方法之间的输出差异。
根据@Leigh对使用CharsetEncode()
函数执行二进制到字符串转换的推荐方法的有用注释,代码将导致:
<cfset key="43480170" />
<cfoutput>#CharsetEncode(binaryDecode(key, "hex" ),'utf-8')#</cfoutput>
您可以使用更改检查updated gist。
答案 1 :(得分:1)
你非常接近。这应该可以解决问题。
<cfset key="43480170">
<cfoutput>#toString(binaryDecode(key, "hex" ))#</cfoutput>
返回CHp