network的なしゅうしょく活動

久々のプログラミングねた。

Cの型で、unsignedとかsignedってあるじゃん。あれと同じような感じでnetworkっていう修飾できないかなー、なんて思ったりして。

つまりネットワークバイトオーダーを修飾子としてつけたいわけだ。

IA32 endianなアーキテクチャの場合(big/littleどっちか忘れたけどたしかlittleだったような気がするな)、

network int a_n;
int a=1;

a_n=a;

printf("a_n=%d, a=%d\n", a_n, a);

の場合は微妙だがprintfが型変換しないとして、

a_n=16777216, a=1

と出力され、printf("a_n=%d, a=%d\n", (int)a_n, a);の場合は

a_n=1, a=1

と出力される。つまりhtonXntohXをキャストだけでやってほしいわけ。htonlでも戻ってくるのはint(long)であって、処理しているものがどっちのバイトオーダーかを判別するくらいコンパイラがやってくれても罪にはなるまい。ネットワークバイトオーダー型のままで四則演算したいこともあるしさ。キャストでbyteswapが勝手に走る。64bitのntohll(だっけ? FreeBSDのnetinet/in.hにはあったような気がするがLinuxのにはない)がない処理系でも問題がなくなる。いいことずくめだ。

これは別にCじゃなくてもいいけどね。C++ならクラスとして書けるか。しかし中身のないクラスになるだろうな。むしろテンプレートかな。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です