这个Perl行的等价物在C中会是什么?
unpack('J>', pack('B*', $s))
根据Perl的构建,它采用4或8字节的二进制表示
"11110000000000000000000001010001"
或
"0000000000000000000000000000000011110000000000000000000001010001"
并返回由big-endian顺序的那些字节表示的32位或64位整数。
0xF0000051
答案 0 :(得分:1)
要解析二进制字符串,您可以使用strtol()
并使其成为大端,您可以使用htonl()
:
int32_t value = strtol("1010001", NULL, 2);
int32_t big_endian = htonl(value);
严格来说, htonl()
不是C的一部分,但它通常用于网络代码,并且它将长(4个字节)放入网络顺序(恰好是大端)。或者,你必须测试你是否已经在大端盒子上,然后你可以自己做按位操作。