teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

補記

2018/01/03 02:57

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

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
+ ```