正如标题所示,将273ef9
等十六进制数转换为PHP中27/3e/f9
之类的路径是多么有效?
更新::: 实际上,我想要一个非正常的数字转换为dexadecimal和furthr转换为路径....但可能我们可以跳过中间步骤。
答案 0 :(得分:5)
如何将str_split与implode结合起来?可能不是超级高效但非常易读:
implode('/',str_split("273ef9",2));
作为旁注,这当然适用于较大的十六进制字符串,并且可以处理部分(3,5,7英寸长)十六进制数字(通过在最后一个斜线后将其打印为单个字母)。
编辑:根据您现在的要求(十进制 - >十六进制 - >路径),它看起来像这样:
$num = 2572025;
$hex = dechex($num);
implode('/',str_split($hex,2));
当然,您可以将它组合成更短但可读性更低的表示:
implode('/',str_split(dechex($num),2));
答案 1 :(得分:1)
最有效的方法是只触摸十六进制值中的每个字符一次,随时构建字符串。因为字符串可能有奇数或偶数位数,所以你必须先检查一下,如果它是一个奇数长度的字符串,则输出一个数字。然后使用for循环来附加两位数的组,小心是否添加斜杠。这将是几行代码。
除非这个代码被执行了数百万次,否则可能不值得写出这个算法;迈克尔彼得罗夫是如此可读和如此美好。除非您真正需要优化,否则请继续使用。
顺便说一句,要从十进制数转到十六进制数字,只需使用dechex
:)