[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends:00080] Re: String を byte 配列で書き出す方法について
保坂ともうします。
Javaは全く使っておりませんが、
私の直感からずれていると感じたので調べてみました。
直感 : 何のためにbyte型が存在するか?
#Cと違ってJavaはchar == unicodeなので
> > strB = "A7"
> > byte bytA = (byte)Integer.parseInt(strA , 16);
> 完成の喜びに水を差すようですが、そもそも、0x87や0xA7は
> byte型に入りますかね?127から-128までじゃないですか。
> これじゃオーバーフローしてますよね。
なにを調べたかというと、
Java言語仕様書 第二版 ピアソン・エデュケーション
p59
5.1.3 プリミティブ型のナローイング変換
#intからbyteへの変換はこれに該当します。
で、なんと書いてあるかというと、
符合付き整数から整数型Tへのナローイング変換では、型Tを表現するために
使用されるビット数をnとした場合、下位nビットを除いた全てのビットが
破棄される。また数値の絶対量に関する情報が欠落する可能性に加えて、
結果となる値の符合が入力値の符合と異なる可能性も発生する。
さらに、p61にはサンプルコードがあり、
要点だけ引用すると、
System.out.println("(int)255==" + (byte)255);
を実行すると、出力として
(byte)255==-1
を得る。
> オーバーフローの結果、DBの値が改ざんされてファイルに出力
> されていると思いますよ。本当にこういうコードを書いていたら。
そんなことはないというのが結論です。