Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I need to pack a number in 1byte (char), 2 bytes (short), 4 bytes (int) and 8 bytes (long) formats and apply bitwise operator ~ (not). For these needs I use "pack" function, but faced with a problem with 8 bytes format. Consider code below:

$num = 1;
$format = "C"; // C, v, V, P
$binary_num = pack($format, $num);
$inv_binary = ~$binary_num;
$unpack_num = unpack($format, $inv_binary)[1];
echo ($unpack_num);

When $format is "C", "v" or "V" I get expected values: 254, 65534, 4294967294. But when I use "P" (long 8 bytes little endian) format I get -2 instead of 18446744073709551614. Can someone explain why this happens?

P.S. 64 bit machine PHP 7.4, 8.0

Online sandbox: https://sandbox.onlinephpfunctions.com/code/35bf7ffd4e50096c5cfe52901003ffe3b0e97d2d


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
1.3k views
Welcome To Ask or Share your Answers For Others

1 Answer

等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...