忍者ブログ
[193] [192] [191] [190] [189] [188] [187] [186] [185] [184] [183]

DATE : 2017/12/12 (Tue)
×

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


DATE : 2006/10/26 (Thu)

BREW アプリケーションに使うデータファイルとして、バイナリファイルを作ろうとしていたらミスしてしまいました orz

BREW アプリケーションを実行する CPU は、PC とは異なり ARM を使用します。そのため、バイナリファイルを作る上でいろいろと考えなければならないことが出てきます。

例えば、バイトデータを配置する方式のエンディアン。開発機の PC に使われていることが多い x86 系 CPU ではリトルエンディアンですが、ARM アーキテクチャの場合はリトルエンディアン、ビッグエンディアンの両方が混在しているようです。実際、BREW を実行する実機のエンディアンは機種依存になっています。

しかし、BREW API には、実機のエンディアンにバイト列を変換する関数が用意されています。そのため、バイナリファイルのエンディアンを定めておけば、この点は特に問題になりません。

この問題には早々から気付いていたので簡単に解決できたのですが、もうひとつの問題となる、値のビット幅には見落としてしまいました orz

BREW API では、整数型のビット幅は型によって規定されています。つまり、「int32」や「uint16」という型が定められており、それぞれ32ビット整数型、16ビット符号なし整数型を表しています。

しかし、浮動小数点に関しては、ビット幅が定められていません。ただ単に、「double」という型があるだけです(BREW では、float は使えません。浮動小数点を扱う際には、double を使うことになります)。C や C++ において、double 型のビット幅は機種依存です。

そのことを、double 値を書き出すバイナリファイルの仕様を策定して実装している最中に気が付きました orz

(;^ω^)バイナリファイルを書き出すプログラムは Java で作っていたので、余計に気付きにくかったのかもしれません。(Java の場合、double 型は64ビットと決められています)

とりあえず考えてみた解決方法は以下の通りです。

  • 浮動小数点を文字列として書き出す(BREW API には、文字列を解析して double 型に変換する関数があります)
  • 固定小数点数にして、整数型として書き出す
PR
●この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
●この記事へのトラックバック
この記事にトラックバックする:
忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
11 2017/12 01
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
31
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)
ブログ内検索
最近の状況
リンク
カレンダー
11 2017/12 01
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
31
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)