7

ホスト (CPU 依存) とネットワーク (ビッグ エンディアン) の間のバイト オーダーの変換に問題があります。これらは、私の問題を解決する可能性があることがわかったすべての API (Linux の場合は "arpa/inet.h" にあります) です。

 uint32_t htonl(uint32_t hostlong);

 uint16_t htons(uint16_t hostshort);

 uint32_t ntohl(uint32_t netlong);

 uint16_t ntohs(uint16_t netshort);

1 つのことを除いて、符号なし整数(2 バイトまたは 4 バイト) のみを処理します。

では、符号付き整数のケースを処理する方法はありますか? つまり、以下の機能(API)をどのように実装すればよいのでしょうか?

 int32_t htonl(int32_t hostlong);

 int16_t htons(int16_t hostshort);

 int32_t ntohl(int32_t netlong);

 int16_t ntohs(int16_t netshort);
4

1 に答える 1

10

技術的に言えば、機能を借用したいだけなので、変数内の値は問題ではありません。符号付きを符号なしに割り当てると、その値は変わりますが、ビットは同じです。したがって、署名付きに戻すことは問題ありません。

編集: アムリットが言ったように、これはSigned Integer Network と Host Conversionの複製です。

于 2013-08-16T15:12:22.267 に答える