• ベストアンサー

エンディアン変換を高速に行うには?

こんばんわ, 現在Redhat Linux 9の環境でCの勉強をしています。 ファイルから読み取ったデータがBIGENDIANの形なので,それをLITTILE ENDIANになおして使用したいのですが,できるだけ高速に変換するアルゴリズムを考えています。 変換するデータは1byte(これは関係なし),2byte,4byte,でそれぞれunsignedのshortintとint型です。 とにかくべた書きでもいいのですが,どのようにすれば高速に変換できるのでしょうか。 glib.hやhtonlなどを使用する方法などよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • onosuke
  • ベストアンサー率67% (310/456)
回答No.2

linux(glibcな処理系)だと,htonl()もインライン展開がなされます。 実行速度はエンディアン変換演算よりも,その周囲の処理全体をみてコード最適化する方が大事。

その他の回答 (1)

  • mid2k
  • ベストアンサー率50% (2/4)
回答No.1

glib のソースを見る限り GINT16_FROM_BE とか GINT32_FROM_BE を使えば、インラインアセンブラに展開されているようです。 htonl は関数呼び出しだからそれがない分 glib 有利・・・かも ただ、バイトオーダーの変換なんて glib 使っても自力でマクロ組んでも そんな劇的に速度が変化するとはおもえないなぁ

yu393939
質問者

お礼

こんにちわ,回答ありがとうございます。 ただ,GUINT16_LE_BEなどを使用しようとすると,ヘッダーファイル自体がエラーを起こすんです。 何かダウンロードがおかしいのでしょうか。

関連するQ&A