我想解壓從C程序傳遞到Perl腳本通過SysV :: IPC的無符號長整型值。如何在64位Perl中解壓縮(64位)unsigned long?
我們知道這個值是正確的(我做了一個測試,將相同的值發送到兩個隊列中,一個由Perl讀取,另一個由C應用程序讀取),並且所有的過期值都被正確讀取(用q
代替的i!
使用64位整數)。
它也知道,PHP已經在錯誤something similar(搜索 「無符號長在64臺機器」)(似乎是相似的: Pack/unpack a 64-bit int on 64-bit architecture in PHP)
參數到目前爲止測試:
- ..Q(=一些值,該值是比預期更大)
- ..L(= O)
- ..L! (=大值)
- ..(= 0)
- ..l! (=大數值)
- ..ln! (= 0)
- ..N,..N! (= 0)
use bigint; use bignum;
- 無效。
詳細說明:
sizeof(unsigned long)
= 8;Data::Dumper->new([$thatstring])->Useqq(1)->Dump();
沿着一些有意義的空字節很多..- byteorder ='12345678';
解決方案: - x4Q
填充四個字節。
顯示Data :: Dumper-> new($ string) - > Useqq(1) - > Dump'的輸出,以及您期望的數字。也許輸出perl -V:byteorder – ysth 2011-03-30 15:44:17
對不起,我的意思是輸出'print Data :: Dumper ...' – ysth 2011-03-30 16:04:20
@ysth,VAR1 =「\ 210 \ 23 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 210 \ 23 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 177 \ 0 \ 0 \ 1 \ 0 \ 0 \ 0 \ 0 \ 177 \ 0 \ 0 \ 1 \ 0 \ 0 \ 0 \ 0W \ 273 \ @ \ 37 \ 0 \ 0 \ 0 \ 0}^\ 330U \ 0 \ 0 \ 0 \ 0 \ 264 \ 13 \ 340U \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 16T \ 223M \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0" ; - 哇,太多了\ 0,檢查。也許'我的$ string'聲明不適合返回類型。 – 2011-03-30 16:11:33