php扩展>>窃听器

时间:2017-08-08 03:14:28

标签: php c php-extension

要编写PHP扩展,我在其中使用>>,但出乎意料的是它出错了。

printf("%08x ", (W[16]));
printf("%08x ", (W[16]) >> 17);
printf("%08x ", 2425545216 >> 17);

结果:

9092e200 40c04849 00004849

注意:

W[16]=0x9092e200 = 2425545216,在c中,代码正常。但是在php扩展中,>>不会向左边填充0。

php_version: PHP:7.1.7 谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

在C中,对有符号整数的按位右移操作的结果是实现定义的。例如,请参阅this question的答案。

0x9092e200可以解释为无符号整数2425545216以及有符号整数-1869422080。例如,以下代码输出-1869422080 2425545216

int x = 0x9092e200;
printf("%d %d",  x, (unsigned)x);

因此,如果您想用零填充空位,请将W[16]转换为无符号,例如:

printf("%08x ",  ((unsigned int)W[16]) >> 17);