忍者ブログ
[217] [216] [215] [214] [213] [212] [211] [210] [209] [208] [207]

DATE : 2017/09/20 (Wed)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2006/11/26 (Sun)

BREW では機種によって CPU が異なるため、エンディアンが固定ではありません。そのため、バイナリデータを機種に依存せずに扱うには、エンディアンを機種に合わせて内部で変換しなければなりません。

機種のエンディアンに変換するには、以下のマクロ関数を使用します。(以下は BREW 3.1.2 API リファレンスから抜粋したものです)

  • uint16 NTOHS(uint16 us)
  • unsigned long NTOHL(unsigned long ul)

「N」はネットワークバイトオーダを表し、「H」は機種(ホスト)のエンディアンを表します。つまり「N」TO「H」とは、ネットワークバイトオーダから機種のエンディアンに変換する関数であることを表しています。

なお、ネットワークバイトオーダはビッグエンディアンとされています。そのため、バイナリデータをビッグエンディアンとしておけば、これらの関数を介すことで機種のエンディアンへの依存を防ぐことができます。

ところで、リファレンスを見るかぎりでは、NTOHS の扱うビット数は16ビットと定義されていますが、NTOHL は定義されていないように見えます。

しかし、NTOHL の定義(AEEStdLib.h)を覗いてみると、uint32 と定義されていました。

そのため、以下のように見なしても問題ないと思います。

  • uint16 NTOHS(uint16 us)
  • uint32 NTOHL(uint32 ul)

(逆に機種のエンディアンからネットワークバイトオーダに変換するマクロ関数もありますが、この記事では触れません)

PR
●この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
●この記事へのトラックバック
この記事にトラックバックする:
忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
08 2017/09 10
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)
ブログ内検索
最近の状況
リンク
カレンダー
08 2017/09 10
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)