这个Perl行在C中的等价值是多少?

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

根据Perl的构建,它采用4或8字节的二进制表示
"11110000000000000000000001010001"


"0000000000000000000000000000000011110000000000000000000001010001"

并返回32位或64位整数,由这些字节按大端顺序表示。
0xF0000051

最佳答案

要解析二进制字符串,可以使用strtol()并使其成为大端,可以使用htonl()

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

htonl()严格地说不是C的一部分,但是它对于网络代码来说是很常见的,它将一个长的(4字节)放入网络顺序中(恰好是大端)或者,你必须测试你是否已经在一个大端接盒上,然后你可以自己做位运算。

09-06 21:20