2

この Perl 行に相当するものは、C では何ですか?

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

Perl のビルドに応じて、4 または 8 バイトのバイナリ表現を使用します。

"11110000000000000000000001010001"

また

"0000000000000000000000000000000011110000000000000000000001010001"

これらのバイトで表される 32 ビットまたは 64 ビットの整数をビッグ エンディアン順で返します。

0xF0000051
4

1 に答える 1

1

使用できるバイナリ文字列を解析し、strtol()ビッグエンディアンにするために使用できるのは次のhtonl()とおりです。

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

htonl()厳密に言えば、Cの一部ではありませんが、ネットワークコードでは一般的であり、長い(4バイト)をネットワークの順序に入れます(これはたまたまビッグエンディアンです)。または、すでにビッグエンディアンボックスを使用しているかどうかをテストする必要があります。そうすれば、ビット単位の操作を自分で行うことができます。

于 2013-02-22T00:08:37.183 に答える