PHP字符串与十六进制互转求助:字符串转十六进制结果异常
解决字符串转十六进制的错误问题
嘿,我来帮你理清楚这个问题~
你当前的代码逻辑出现了明显的误区:base64_decode() 是用来解码base64格式的字符串,但你输入的 'Geoff' 本身就是普通字符串,并非base64编码后的结果。直接对它调用 base64_decode() 会得到无效的二进制数据(甚至可能被截断),后续用 bin2hex() 转换自然就得不到正确的十六进制值了。
正确的实现方式
如果你只是想把普通字符串转换成十六进制,直接使用 bin2hex() 即可,不需要多余的base64解码步骤:
$fName = 'Geoff'; $hex = bin2hex($fName); echo $hex; // 输出:47656f6666(正好10个字符,完全符合预期)
为什么这个结果是对的?
每个ASCII字符对应两位十六进制数:
G→47e→65o→6ff→66f→66
5个字符×2位=10位十六进制,和你预期的结果一致。
额外说明
如果你的场景中确实涉及base64编码的环节,那正确的流程应该是先对原字符串做base64编码,再解码回原字符串,最后转十六进制——但这完全是多此一举,直接用 bin2hex() 处理原字符串效率更高:
$fName = 'Geoff'; $base64Encoded = base64_encode($fName); // 得到:R2VvZmY= $decodedStr = base64_decode($base64Encoded); // 还原为:Geoff $hex = bin2hex($decodedStr); // 依然得到:47656f6666
下次遇到转换问题时,先明确每个函数的适用场景:bin2hex() 直接负责二进制字符串(PHP中普通字符串本质就是二进制字符串)到十六进制的转换,而base64相关函数是用于在二进制数据和base64文本格式之间做转换,不要混淆哦~
内容的提问来源于stack exchange,提问作者Geoff L
相关产品推荐
相关产品推荐

