アプリ版:「スタンプのみでお礼する」機能のリリースについて

やりたいことは、
電話がかかってきた際にアロハPC1(ナンバーディスプレイ)から
着信番号を受信して、
番号に該当する会員情報(DBから)をWEB画面に表示したいのです。

SerialDebugというソフトを使って、情報は取得できていると思います。
下記のような感じでいろいろ出てきます。

[TEXT] こ0ア3アイアイク090ア6ア5クキ00

[CHAR] _sp _sp 0 _sp 3 _sp _sp 0 _sp _sp 0 9 0 _sp 5 _sp 9 _sp _sp 5 5 _sp _sp _sp _sp _sp _sp _sp _sp _sp _sp

[DEC] 130 177 48 177 51 177 178 48 178 184 48 57 48 177 53 57 57 184 183 53 53 160 160 160 160 160 160 160 160 160 3

[HEX] 82 B1 30 B1 33 B1 B2 30 B2 B8 30 39 30 B1 35 B1 39 B8 B7 35 35 A0 A0 A0 A0 A0 A0 A0 A0 A0 03


この時点で、このわけの分からないデータ(信号?)をどうすれば着信番号になるのかさっぱりです。
[HEX]の " 30 39 30 B1 35 B1 39 B8 B7 35 35 "
から 09015198755
というテストに使っている携帯番号が取れるのが分かります。
(ここに書いてある番号は適当です。)

とりあえず、このデータはどういう風に解析して正確な着信番号にすればいいのでしょうか?


また、これをJavaのRXTXライブラリを使用して取得したいと考えていて、
下記、サンプルソースを真似して実行してみました。
http://www.javainthebox.net/JavaForFA/08-09CommA …
の中の./src/DumbTerminal.java

すると、イベント処理ルーチンのデータの読み込みのときにエラーが発生してしまいます。

java.io.IOException: Underlying input stream returned zero bytes
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at SerialTest.serialEvent(SerialTest.java:67)
at gnu.io.RXTXPort.sendEvent(RXTXPort.java:732)
at gnu.io.RXTXPort.eventLoop(Native Method)
at gnu.io.RXTXPort$MonitorThread.run(RXTXPort.java:1575)

こんな感じです。

これは何が原因なのでしょうか?

少ない情報で申し訳ありませんが、
よろしくお願いいたします。

A 回答 (1件)

" 30 39 30 B1 35 B1 39 B8 B7 35 35 " のうち、


30 31 32 … 39 は、そのままで0~9を表す文字コードですね。
でも B1 や B8 B7 を、31、38、37に変換しないといけないので、
マスクという小技を使います。

Javaの基本的なことは分かっているとして、上記の
16進のデータから電話番号を取り出す部分はこうなります。

 public static void main(String[] args) {
  // 16進で" 30 39 30 B1 35 B1 39 B8 B7 35 35 " のデータ
  int[] data = {0x30, 0x39, 0x30, 0xB1, 0x35, 0xB1, 0x39, 0xB8, 0xB7, 0x35, 0x35};
  
  StringBuilder sb = new StringBuilder();
  for (int x : data) {
   char c = (char) (x & 0x3F); // 3Fでマスクする
   sb.append(c);
  }
  String phoneNumber = sb.toString(); // "09015998755" になる
  System.out.println(phoneNumber);
 }
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
大変参考になりました。

お礼日時:2008/10/16 13:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!