我在MySQL中有一个BINARY(40)列,在那里我存储了5个8字节的整数。我试图逐个在PHP中读取这些数字:
$result = mysqli_query($con,"SELECT data FROM list WHERE id=".$id);
$mysql_array = mysqli_fetch_array($result);
$list = str_split($mysql_array["data"], 8);
for($i = 0; $i < 5; $i++)
echo $list[$i]."<br/>";
而不是我期望的数字,打印出奇怪的符号。如何将这些数字从二进制字符串转换为整数?
答案 0 :(得分:2)
按如下方式更改您的查询:
$result = mysqli_query($con,"SELECT cast(data as char(40)) FROM list WHERE id=".$id);
答案 1 :(得分:1)
好的,由于您存储号码的方式,此代码仅在您获得64位支持时才有效,否则您必须查看bc替换,不应该&# 39;太难了:
for($i = 0; $i < 5; $i++) {
$bin_str = $list[$i];
$int_val = 0;
for ($j = 0; $j < 8; ++$j) {
$byte_val = ord(substr($bin_str, $j, 1));
// push the next byte onto our integer:
$int_val = ($int_val << 8) + $byte_val;
}
echo $int_val;
}
编辑:在所有可能的情况下,这是一个BC等值,但我现在无法测试它,但逻辑保持不变。
for($i = 0; $i < 5; $i++) {
$bin_str = $list[$i];
$bc_val = '0';
for ($j = 0; $j < 8; ++$j) {
$byte_val = ord(substr($bin_str, $j, 1));
// push the next byte onto our integer:
$bc_val = bcadd(bcmul($bc_val, 256, 0), "$byte_val", 0);
}
echo $bc_val;
}