何度かやらかしたアレを、またやってしまった。。。
hiro99ma blog: [java]符号無し演算にはまる
プロトコル解析処理で、byte配列のデータを扱っていたのだけど、ところどころ間違っていた。
たとえば、res[5]にデータ長が入っていたとして、
int length = res[5];
何てことを平気でやっていたのだ。
テストデータも長さが短かったのですり抜けていて、負荷テスト用の大きいデータにしたら、もういきなり「配列サイズに負の数を指定してる例外」とか「バッファサイズが足りないよ例外」とか、「チェックサムが一致してナインだけど」とか、あれこれ言われ始めた。。。
unsignedな自分のために、対策を書いておこう。
- byte変数を比較するだけだったら、あまり気にしなくて良い。
相手が直値だったら、(byte)とか付けてやることもあるだろうが、まあエディタの段階でわかるだろう。 - 計算するときは、「& 0xFF」としておくのだ。
byte以外に代入するときも、やっておこう。
チェックサムは案外いけるんじゃないかと思ったけど、計算方法次第か。
あとで見て迷うと思うから、論理積を取っておこう。
計算するとint型になる、だったはず。
では、byte型を演算して、その結果をbyte型と比較するんだったら、ここまでしなくても大丈夫だろうか?
前回も「ビットが小さくなる方は勝手に削られるからよかろう」としている。
ただ、演算した方をbyte型にキャストするのをわすれんようにせないかん。
1箇所こういうのを見つけると、急に不安になるから困りますな。
もうbyte演算恐怖症です。。。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。