
やりたいことは、
電話がかかってきた際にアロハ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)
こんな感じです。
これは何が原因なのでしょうか?
少ない情報で申し訳ありませんが、
よろしくお願いいたします。
No.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);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaでのエラーについて
-
javaからデータベースに接続 エ...
-
JSFで、マネージビーンに画面の...
-
JSPファイルで生じるエラーをど...
-
vba クリップボードクリアにつ...
-
IISワーカープロセスが原因でCP...
-
vectorクラスについて。
-
エクリプスのプログラミングに...
-
サーブレットで電卓をつくる
-
MSFormsとは何ですか?
-
プラグインとパッチの違いは?
-
visual stadio 参照問題
-
VBAの「for i=1 to cells(…」...
-
この便利な時代に開発環境すら...
-
CrystalReportsのバージョン確...
-
予約システムの開発ツール
-
ゲームコントローラーを使いたい
-
unzip32.dllの利用について(64b...
-
JAVAプログラムをWEB表示させる...
-
java3dが動かない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaでのエラーについて
-
javaからデータベースに接続 エ...
-
struts2環境構築で不具合が出て...
-
java と javax の違いは?
-
Fileクラス
-
Javaにてシリアル通信を行って...
-
Tomcatでエラー
-
クラスパスがとおりません。
-
DBから全権検索したデータをjsp...
-
FirefoxでJava Appletが表示で...
-
oracle9iにJDBC接続が出来ない
-
WebAPIをJavaScriptで利用できる?
-
これをjavaとGUIを使って作りた...
-
javaアプレットでゲームを作り...
-
アプレットとテキストファイル
-
JSFで、マネージビーンに画面の...
-
JNIでロードするライブラリが見...
-
CPUの個数
-
一斉コンパイルのバッチファイ...
-
execでdirコマンドを実行すると...
おすすめ情報