2018年12月19日

2018-12-19 Android の byte型の比較

2018-12-19 Android の byte型の比較

Android のファイラーを開発していますが、byte型の扱いを間違えていて、思うように動作しませんでした。
byte型は -128 から +127 の範囲ですが、ファイルの内容を読み込んで文字コードを比較する箇所で、byte型を使用して比較していました。

ms932 のカタカナの文字コードは 2バイトで、Ox83 0x40 から 0x83 0x96 までの範囲になります。
byte型での比較で、最初は単純に比較していましたが、 0x83 0x81 が条件と一致しない結果となりした。
見た目では良さそうですが、0x7F を超えると数値がマイナスになるので、条件が一致しなくなります。
0x40 は +64、0x96 は +150 ではなく -96、0x81 は -127 になります。
従って +64 <= -127 <= -96 は成り立ちません。
最終的に 0x7F を境にして、判定を行う事で解決しました。
これなら -128 <= -127 <=-96 となり成り立ちます。


// ファイル設定
FileInputStream fin = new FileInputStream(filename);
// 配列サイズはファイルサイズに余裕を持たせる
byte buffer[] = new byte[(int) (ifile_size+1)];
// 一回で読み込み
fin.read(buffer);
// 終了
fin.close();

// ms932 カタカナ
if ( ( (buffer[i+0] == (byte)0x83) && (buffer[i+1] >= (byte)0x40) ) &&
( (buffer[i+0] == (byte)0x83) && (buffer[i+1] <= (byte)0x7F) )
){
bfind1 = true;
}
// ms932 カタカナ
if ( ( (buffer[i+0] == (byte)0x83) && (buffer[i+1] >= (byte)0x80) ) &&
( (buffer[i+0] == (byte)0x83) && (buffer[i+1] <= (byte)0x96) )
){
bfind1 = true;
}
posted by bonworld at 18:53| Comment(0) | TrackBack(0) | BonsFM(Android)