Byte→ Hex
String.format("%02x", b&0xff)
위의 코드를 이용하여 변환합니다. "%02x " 는 (b&0xff) 를 2자리 Hex String으로 출력합니다.
b&0xff 비트 연산은 앞에 비트가 의도치 않게 1로 채워졌을 때 0으로 바꿔주기 위함입니다.
byte는 8비트이나 앞의 한자리는 부호를 식별하기 때문에 범위는 -128~127이됩니다.
이 범위를 0~255로 바꾸어 주기 위해 &0xff를 사용하면 0xff는 00000000 00000000 00000000 11111111이므로,
127이 넘는 숫자가 나왔을 때도 앞의 비트를 0으로 바꿔주기 때문에, 양수 표현이 가능해 지게 됩니다.
예를들어 , 150이라는 int형 숫자를 표현하기 위해서는 150은 int형 32비트이기 때문에, 10010110이 확장되어
11111111 11111111 11111111 10010110으로됩니다. 이는 150이 아닌 음수 -106 이기 때문에 &0xff를 통해
00000000 00000000 00000000 10010110인 150으로 바꾸어 주는 것입니다.
int형 byte를 사용하지 않는다면, 또는 이를 의도하지 않았다면, &0xff는 빼주면 됩니다.
public String byteArrayToHex(byte[] a) {
StringBuilder sb = new StringBuilder();
for(final byte b: a)
sb.append(String.format("%02x", b/*&0xff*/));
return sb.toString();
}
Hex → Byte
예를들면 Hex String a55a문자열을 { 0xA5, 0x5A } 바이트 배열로 바꾸어 줍니다.
a하나, 5하나를 16진수로 받아 byte형으로 저장한뒤 a는 4비트 앞으로만 땡겨주면 { 0xA5, 0x5A } 바이트 배열로 바뀌게 됩니다.
public byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ( (Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16) );
}
return data;
}
Hex → Float
public float hexToFloat (String args) {
Long i = Long.parseLong(args, 16);
Float f = Float.intBitsToFloat(i.intValue());
return f;
}
intBitsToFloat()을 사용하였습니다.
Byte → Float
public float bytesToFloat (byte[] byteTemp) {
ByteBuffer buf = ByteBuffer.wrap(byteTemp);
return buf.getFloat();
}
getFloat()를 사용하였습니다.
'Android > Function' 카테고리의 다른 글
[안드로이드] 외부 저장소에 데이터 파일 저장하기(쓰기) ― SAF(Storage Access Framework)로 파일 쓰기 (6) | 2020.04.27 |
---|---|
adb 명령어 모음 (0) | 2020.04.23 |
안드로이드 버튼 텍스트는 왜 대문자로만 나올까요? (0) | 2020.03.26 |
안드로이드 스튜디오 Logcat 창이 보이지 않을 때 (0) | 2020.02.27 |