2016/07/05

[java]byte解析の恐怖

何度かやらかしたアレを、またやってしまった。。。

hiro99ma blog: [java]符号無し演算にはまる

プロトコル解析処理で、byte配列のデータを扱っていたのだけど、ところどころ間違っていた。

たとえば、res[5]にデータ長が入っていたとして、

int length = res[5];

何てことを平気でやっていたのだ。
テストデータも長さが短かったのですり抜けていて、負荷テスト用の大きいデータにしたら、もういきなり「配列サイズに負の数を指定してる例外」とか「バッファサイズが足りないよ例外」とか、「チェックサムが一致してナインだけど」とか、あれこれ言われ始めた。。。

 

unsignedな自分のために、対策を書いておこう。

  • byte変数を比較するだけだったら、あまり気にしなくて良い。
    相手が直値だったら、(byte)とか付けてやることもあるだろうが、まあエディタの段階でわかるだろう。
  • 計算するときは、「& 0xFF」としておくのだ。
    byte以外に代入するときも、やっておこう。
    チェックサムは案外いけるんじゃないかと思ったけど、計算方法次第か。
    あとで見て迷うと思うから、論理積を取っておこう。

計算するとint型になる、だったはず。

 

では、byte型を演算して、その結果をbyte型と比較するんだったら、ここまでしなくても大丈夫だろうか?
前回も「ビットが小さくなる方は勝手に削られるからよかろう」としている。
ただ、演算した方をbyte型にキャストするのをわすれんようにせないかん。

 

1箇所こういうのを見つけると、急に不安になるから困りますな。
もうbyte演算恐怖症です。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。