1

ビッグエンディアンデータを使用して算術演算を行う便利な方法はありますか?これが私が(擬似コードで)やってきたことです:

main:
    unsigned int big_endian_number = 0x12345678;
    int multiplier = 7;

    unsigned int little_endian_number = reverse_the_bytes(big_endian_number);
    little_endian_number = little_endian_number * multiplier;

    big_endian_number = reverse_the_bytes(little_endian_number);

これは直接的に思えますが、冗長でエラーが発生しやすいです。より良い方法が必要です。

4

3 に答える 3

4

ネットワークのバイト順序はビッグエンディアンです。ローカルエンディアンに変換するntohl(ネットワークからホスト)を使用してから、htonlを使用して元に戻します。

必要に応じてコード例を投稿できますが、それはかなり簡単だと思います。

于 2013-01-30T21:25:55.273 に答える
1

個人的には、必要な算術演算を実行するために、ヘッダーにいくつかの関数を定義します。

#include <arpa/inet.h>

static inline uint32_t BEAdd_u32(uint32_t x, uint32_t y) {
    return htonl(ntohl(x) + ntohl(y));
}

コードに変換を散らかす代わりに、それらを使用します。

于 2013-01-30T21:15:02.950 に答える
0

この質問は意味がありません。と書くx = 0x12345678; x *= 2と、xの値はになります0x2468acf0。それがf0最初のバイトにあるのか、最初のバイトにあるのか24はまったく関係ありません。高水準言語を使用することの全体的なポイントは、それが機能し、どのよう0x12345678に格納されるかを気にしないということです。(つまり、コンパイラーはリテラル0x2468acf0をボックス上の適切な表現に変換するので、心配する必要はありません。)

于 2013-01-30T21:15:32.123 に答える