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

回答編集履歴

2

ビットシフト

2017/03/25 01:12

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -6,4 +6,17 @@
6
6
  int x = Integer.parseUnsignedInt(data.substring(i, i + 8), 16);
7
7
  int y = Integer.parseInt(data.substring(i + 8, i + 10), 16);
8
8
  }
9
+ ```
10
+
11
+ また、文字列にせずともビットシフトを利用すればbyte配列から直接intに変換できます。
12
+ ```java
13
+ //元のデータの並びがこういうことですよね?
14
+ byte[] data = {0xFF, 0x00, 0x65, 0xF3, 0x33, 0x44, 0x55, 0x77, ・・・・};
15
+ for (int i = 2; i < data.length; i += 5) {
16
+ int x = 0;
17
+ for (int j = 0; j < 4; j++) {
18
+ x |= data[i + j] << ((3 - j) * 8);
19
+ }
20
+ int y = data[i + 4];
21
+ }
9
22
  ```

1

Long\.parseLong追加

2017/03/25 01:12

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  文字列をその桁数(8桁と2桁)で区切っていけばいいのでは。
2
- ※ただし、parseIntだと8桁の先頭ビットが1の場合(1文字目が8~F)、intの範囲を超えてしまうため、parseUnsignedIntを使うことをお勧めします。
2
+ ※ただし、parseIntだと8桁の先頭ビットが1の場合(1文字目が8~F)、intの範囲を超えてしまうため、parseUnsignedIntを使うかLong.parseLongでlongに変換することをお勧めします。
3
3
  ```java
4
4
  String data = "65F333445577・・・";
5
5
  for (int i = 0; i + 10 <= data.length(); i += 10) {