我在Qt c ++中有此代码
const unsigned char *packed = reinterpret_cast<const unsigned char*>(data.constData());
res.type = static_cast<int>(packed[0]);
res.period = static_cast<int>(packed[1]);
res.rate = static_cast<qint16>(packed[2] | (packed[3] << 8)) / 100.;
res.edge = static_cast<qint16>(packed[4] | (packed[5] << 8)) / 100.;
return res;
如何将其从c ++转换为php
我尝试:
$a = unpack ("C*", $data);
$eventList = [];
for ($i=0; $i < $a[1]; $i++)
{
$event = array ();
$index = $i * 6 + 2;
$event["type"] = $a[$index];
$event["period"] = $a[$index+1];
$event["rate"] = ($a[$index+2] | ($a[$index+3] << 8)) / 100;
$event["edge"] = ($a[$index+4] | ($a[$index+5] << 8)) / 100;
}
边缘转换错误 很大的价值。 [边缘] => 650.86 必须为-4.5
类型,期间和费率不错;
请帮助我
答案 0 :(得分:0)
不知道确切的答案,但有一些解决问题的可能方法:
使用var_dump检查$a[$index+4]
和$a[$index+5]
的值以获取其值并输入:
var_dump($ a [$ index + 4]); var_dump($ a [$ index + 5]);
数据类型及其值是否符合预期?大概好主意是在计算之前/之后检查所有数据,以确切地知道您要处理的内容。
仔细检查您的转换类型,也许您不应该使用C*
,但是也许使用S
或s
?
conversion types
如果您需要在php中进行类型转换,则可以在此处检查操作方式:Type Juggling and Casting
请注意,在PHP中,您可以使用具有ASCII数字的字符串,可以将其视为用于计算的数字:
$foo = 5 * "10 Little Piggies"; // $foo is integer (50)
您可能不想要的东西。
MSB还可以对应于已签名二进制数字的符号位 read-wiki
如果packed[5]
应该为负,但不是