【问题标题】:How do you bitwise shift a Hex String which is of data type string in php?您如何按位移动 php 中数据类型为字符串的十六进制字符串?
【发布时间】:2012-09-10 22:10:39
【问题描述】:

我有一个 2 字节长的十六进制字符串,需要将第一个字节向左按位移动一个字节,然后将第二个字节添加到它。两个字符串都来自一个 32 个字符长的字符串。字符串来自我正在解析的数据文件。

$hex="05E000752F0100D0A500503891FB199A"; //example line of data from file

$vcanvbatt=(base_convert(((base_convert(substr($hex,12,2),16,2)<<8)+base_convert(substr($hex,14,2),16,2)),2,10))/100;

【问题讨论】:

  • $byte1 = hexdec(substr(...)); $byte2 = hexdec(substr(...)); $result = ($byte1 &lt;&lt; 8) + $byte2; ?
  • @DCoder 你应该把它作为答案发布

标签: php binary hex


【解决方案1】:

您根本不需要转换为二进制,只需移动十进制数字即可。如果我正确理解您需要的数学,这应该可以:

$byte1 = hexdec(substr($hex, 12, 2));
$byte2 = hexdec(substr($hex, 14, 2));
$result = ($byte1 << 8) + $byte2;

【讨论】:

  • 8 位移位不能解决这个问题,因为整数在 php 中不是 8 位,你知道它有多长吗?
  • 我不确定我是否明白你在问什么。 php 中的整数很可能是 32 位或 64 位,具体取决于 php 版本,但这无关紧要 - 移动一个字节与 &lt;&lt; 8 相同,并且由于输入只有一个字节,因此不会溢出。如果您发布有关您要计算的内容的更多详细信息可能会有所帮助。
猜你喜欢
  • 2019-07-27
  • 2020-11-07
  • 2018-06-24
  • 1970-01-01
  • 2014-03-19
  • 2014-03-07
  • 2013-02-07
相关资源
最近更新 更多