2012-01-08 6 views
1

私はバイナリファイルをデコードするためのCアプリケーションを作成しています。私は自分のチャンクのサイズを確認する必要があります。 ...cでハードコーディングするのに最適な方法

を私は最大のコンパイラまたは/およびアーキテクチャに依存している間のみ、最小サイズが記載されていることを理解ドキュメントを読むので、私は何かのように行うことができます:***擬似コード

unsigned char byte; 
if((byte = ~0) > 0xff){ 
    typedef (unsigned char & 0xff) byte; /* I know.. ;P */ 
}else{ 
    typedef unsigned char byte; 
} 

は私がすべきunsigned charを使用するたびにビットマスクを適用するだけですか、サイズがわからないタイプにハードコードする別の方法がありますか?

PS:これは私のために重要である理由は、私はシフトの充てるやっされようとしているので.. ありがとう;)

+3

C99コンパイラ(または拡張子の付いたC89コンパイラ)と固定幅タイプ 'uint8_t'、' int16_t'などを使用します。固定幅タイプを定義するコンパイラが見つからない場合あなたのマシン。毎回ビットマスクを適用することが唯一の解決策です。 – pmg

+0

これはアンドロイドプラットフォーム用のライブラリです...そして、私はそれがコンパイラであるかどうか分かりません。あなたが提案するタイプについてのドキュメントを見つけようとします。ありがとう! – Psyclops

+0

32ビット文字を持つプラットフォームで 'uint8_t'はどうなりますか? – CodesInChaos

答えて

3

NためC99(共通の値で追加stdint.hから種類intN_tuintN_tを使用します8,16,32,64)。彼らは固定サイズを持つことが保証されています。

+0

一方、特定のサイズがサポートされていない場合、それらは存在するとは限りません。しかし、あなたが走りそうなシステムではサポートされるでしょう(いくつかのDSPには 'CHAR_BIT> 8 'があります)。そしてそれらはC99で導入されているので、古いC実装ではサポートしていないものもありますが、互換性ライブラリ(http://www.lysator.liu.se/c/q8/index.html)があります。 C99より前の実装。 –

関連する問題