【问题标题】:ColdFusion alternative for hex2bin function PHPhex2bin 函数 PHP 的 ColdFusion 替代方案
【发布时间】:2023-03-10 02:30:01
【问题描述】:

我想解码十六进制编码的二进制字符串;它将通过使用 PHP 的 hex2bin 函数来工作。但我在 ColdFusion 中也需要同样的功能。

PHP

 $key="43480170";

 echo hex2bin($key);

输出:CHp

我已经尝试了下面的代码。但是这个 ColdFusion 代码没有给我在 PHP 中得到的结果;

ColdFusion

<cfset key="43480170" />

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

输出:每次运行都不一样。

我还需要在 ColdFusion 中获得与“CHp”相同的结果。

【问题讨论】:

  • “它不工作”是什么意思?你有错误吗?结果不符合您的预期?
  • 我没有得到预期的值。我的意思是我在 PHP 和 Coldfusion 中获得了不同的价值。
  • 每次运行都不一样。 FWIW,这是因为在字节数组上调用toString()返回字节数组的类名和hash code,而不是表示为字符串的数组的内容

标签: php coldfusion binary hex coldfusion-8


【解决方案1】:

您需要使用 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 的更改。

【讨论】:

  • 旁注,文档建议对新应用程序使用 charsetEncode() 而不是 toString()
  • 这是一个非常有用的信息,但我没想到。我想我会用同样的方法更新答案。非常感谢@Leigh。
【解决方案2】:

你很亲密。这应该可以解决问题。

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

返回CHp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多