回答編集履歴
1
補記
answer
CHANGED
@@ -19,4 +19,15 @@
|
|
19
19
|
こうした場合、低位のバイトは加算の前に0xFFとの論理積をとり負号拡張されないようにする必要があります。(いうまでもなくn1, n2の両方について)
|
20
20
|
|
21
21
|
誤:`short n1 = (short) ((data1[i + 1] << 8) + data1[i]);`
|
22
|
-
正:`short n1 = (short) ((data1[i + 1] << 8) + (data1[i] & 0xFF));`
|
22
|
+
正:`short n1 = (short) ((data1[i + 1] << 8) + (data1[i] & 0xFF));`
|
23
|
+
|
24
|
+
---
|
25
|
+
補記: 問題の原因とは関係なく結果は間違ってませんが効率上の指摘を1点。
|
26
|
+
|
27
|
+
合成後のサンプルデータ(short型)をbyteへ分解する演算ですが、ご質問のコードでは16進数4桁のStringへ変換してその前後の2文字を16進数整数としてパースする方法を採っておられます。しかしその方法よりも整数演算を用いた方が効率的です。Stringのインスタンスを生成しないことでヒープの消費もありませんし、処理自体のスピードもずっと速いです。
|
28
|
+
|
29
|
+
```java
|
30
|
+
short n = ...;
|
31
|
+
data[i] = (byte)n;
|
32
|
+
data[i] = (byte)(n >> 8);
|
33
|
+
```
|