【问题标题】:How to treat two chars in a string as a byte?如何将字符串中的两个字符视为一个字节?
【发布时间】: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 你说的很对,这让我到达了我需要去的地方。好人。
  • 另一种解决方案是将hexdecstr_paddecbin 一起使用:$tag = "4F"; $p = hexdec($tag); echo str_pad(decbin($p), 8, 0, STR_PAD_LEFT);。输出01001111

标签: php tlv


【解决方案1】:

如果您想要“十六进制数字的十进制表示”,hexdec 是一种方法。

如果您想要“十六进制数字的位模式”,请使用base_convert。文档甚至展示了这种操作的示例:

示例 #1 base_convert() 示例

$hexadecimal = 'a37334';
echo base_convert($hexadecimal, 16, 2);

上面的例子会输出:

101000110111001100110100

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多