【发布时间】:2018-11-08 15:05:56
【问题描述】:
考虑:
$tag = "4F";
$tag 是一个包含两个字符“4”和“F”的字符串。我希望能够将它们分别视为整个字节(4F)的上半字节和下半字节,以便我可以继续计算位模式(01001111)
由于这些在技术上是字符,因此可以将它们单独视为一个字节 - ASCII 表上的 4 是 0x52,F 是 0x70。
几乎所有允许操作字节的 PHP 内置函数(我目前看到的)都是后一种描述的变体:“4”是 0x52,而不是字节的高半字节。
我不知道有什么快速或内置的方法可以让 PHP 以我想要的方式处理这个问题,但感觉它应该在那里。
如何将字符串“4F”转换为字节 4F,或将每个字符视为半字节对中的半字节。是否有任何内置函数可以让 PHP 将像“4F”或“3F0E”这样的字符串作为半字节对来处理?
谢谢。
【问题讨论】:
-
@bishop 看看我是不是做对了...由于格式选项有限,下面的sn-p会做hexdec()转换,然后用sprintf,尝试输出一个位掩码。
$tag = "4F"; $hexdec_result = hexdec($tag); $bitpattern = sprintf("%08x", $hexdec_result);产生以下输出:标记 [4F] 需要位模式 01001111。 hexdec() 返回 [79] 位模式,因为这是 [0000004f] -
@TLV 如果你想要二进制,在
sprintf调用中不是"%08b"吗?或者,只需使用decbin(或base_convert将整个事情打包到一个电话中)。 -
@iainn 你说的很对,这让我到达了我需要去的地方。好人。
-
另一种解决方案是将
hexdec与str_pad和decbin一起使用:$tag = "4F"; $p = hexdec($tag); echo str_pad(decbin($p), 8, 0, STR_PAD_LEFT);。输出01001111