■89411 / inTopicNo.4) |
Re[3]: iBeacon byte配列→UUID変換について |
□投稿者/ kiku (65回)-(2018/11/27(Tue) 11:29:54)
|
> 下記サイトにて、旧実装方法は10バイトから25バイトまでUUIDと書いてありますが、
> 今回は新実装方法で実装しているため、3バイトからUUIDではないかと認識しています。
> https://recruit.gmo.jp/engineer/jisedai/blog/android5-scan-ble/
新実装方式のほうだったんですね。
だとすると、msg_bytesに情報が格納されているので
3バイト目から16バイト分取得するのであるならば下記のようになります。
先ほど、回答したリンク先のソースを、改造してみました。
テストなどはしていません。
また、効率的ではないソースとは思いますので
別の命令を使って短くすることもできるかもしれませんが、
まずは動作させることを優先と考えてそのままです。
String uuid = IntToHex2(msg_bytes[2] & 0xff)
+ IntToHex2(msg_bytes[03] & 0xff)
+ IntToHex2(msg_bytes[04] & 0xff)
+ IntToHex2(msg_bytes[05] & 0xff)
+ "-"
+ IntToHex2(msg_bytes[06] & 0xff)
+ IntToHex2(msg_bytes[07] & 0xff)
+ "-"
+ IntToHex2(msg_bytes[08] & 0xff)
+ IntToHex2(msg_bytes[09] & 0xff)
+ "-"
+ IntToHex2(msg_bytes[10] & 0xff)
+ IntToHex2(msg_bytes[11] & 0xff)
+ "-"
+ IntToHex2(msg_bytes[12] & 0xff)
+ IntToHex2(msg_bytes[13] & 0xff)
+ IntToHex2(msg_bytes[14] & 0xff)
+ IntToHex2(msg_bytes[15] & 0xff)
+ IntToHex2(msg_bytes[16] & 0xff)
+ IntToHex2(msg_bytes[17] & 0xff);
//intデータを 2桁16進数に変換するメソッド
public String IntToHex2(int i) {
char hex_2[] = {Character.forDigit((i>>4) & 0x0f,16),Character.forDigit(i&0x0f, 16)};
String hex_2_str = new String(hex_2);
return hex_2_str.toUpperCase();
}
|
|