2013-02-21 100 views
2

C語言中這條Perl線的等價物是什麼?Perl語句等價於C

unpack('J>', pack('B*', $s)) 

根據Perl的製作,它需要的4或8個字節的二進制表示

"11110000000000000000000001010001" 

"0000000000000000000000000000000011110000000000000000000001010001" 

並返回32位或64位的整數這些字節以big-endian順序表示。

0xF0000051 
+4

它在'perl'中做了什麼? ;) – FatalError 2013-02-21 23:50:34

+0

我相信這是一個轉換爲大端無符號整數值......但是,知道$ s字符串的長度會很有趣 – SirDarius 2013-02-21 23:56:53

+0

對不起,我對代碼所做的解釋最初是不正確的。 – ikegami 2013-02-22 00:10:15

回答

1

爲了解析,您可以使用strtol(),並使其大端你可以使用htonl()二進制字符串:

int32_t value = strtol("1010001", NULL, 2); 
int32_t big_endian = htonl(value); 

htonl()嚴格來說不是C的一部分,但它很常見的網絡代碼和它將一個長的(4字節)放入網絡順序(這恰好是大端)。或者,你必須測試你是否已經在一個大端盒子上,然後你可以自己做按位操作。

+0

名稱反向。應該是:'int32_t big_endian = strtol(「1010001」,NULL,2); int32_t big_value = htonl(big_endian);' – ikegami 2013-02-22 00:11:15

+0

這個答案不完整,因爲32位和64位值應該被處理,根據問題。 – SirDarius 2013-02-22 00:17:27

+0

如果有64位值,那麼你可以使用strtoll()來解析字符串。不幸的是,沒有ntonll()調用,所以你可能不得不推出自己的。 – 2013-02-22 00:49:17