2016-07-14 5 views
-2

GPSトラッキングデバイスからこの文字列を読み取ることができず、これらの情報をデコードしてアプリケーション(C#)で使用できるようにする必要があります。私が期待するものGPSトラッカーから読み取ることができない文字列を取得する

$A [email protected]‘)���ÿÿûÿÿ����°#~À‚¡U 

しかし、実際には、以下のようなものです:

*HQ,XXXXXX,41,4#V1,time,A,**Lat**,N/S,**Lng**,W/E,000.00,000,date,FFFFFBFF,432,35,32448,334 

私はC#で標準形式に文字列を変換するにはどうすればよいですか?

私はあなたが見ることができるようにバイトにデータを変換します

24-41-20-20-67-72-51-30-35-41-68-40-91-29-3F-3F-3F-FF-FF-FB-FF-FF-3F-3F-3F-3F-B0-23-7E-C0-82-A1-55 
+0

ネットワークから取得したバイトのエンコーディングによって異なります。適切なEncodingクラスを使用し、それに基づいて文字列を構築します。 – ManoDestra

+2

どこから文字列を取得しますか?これは圧縮に関する問題のようです。たぶん、あなたは 'GzipStream'などでそれを解凍する必要があります。 –

+0

@ManoDestra私は、GPSからデータを取得し、私は、エンコーディングのすべてをテストするが、それは、私は、GPSからデータを取得すなわちAVLデバイス、私はascciとUTF8と、デフォルトエンコーディングを使用する –

答えて

2

その実際にいくつかのバイナリ情報とあなたは明確に持っているかのように文字列に変換できる。例えば

製品のマニュアルを読んでから、このバイナリの形成が表示されます。

進にデータを変換すると、このような何かを与えるだろう。..

24-41-20-20-67-72-51-30-35-41-68-40-91-29-3F-3F-3F-FF-FF-FB-FF-FF-3F-3F- 

そして、あなたはこれらの16進数の正確な意味

EXのマニュアルを参照する必要がある - (中国の一部のデバイスで)

2 bytes(24), stand for standard mode 
10 bytes, is device'ID (41 20 20 67 72) 
6 bytes, is time 
6 bytes, is data 
8 bytes, is latitude 
2 bytes, battery like this 06= 100% 05=80% 04=60% 03=40% 02=20% 01=10% 
10 bytes is longitude 

**これらのバイナリは、バイナリモードで情報を送信するように求められているので、受信しています。

+0

あなたはデバイスIDの後の6バイトが時間であると言いました、51-30-35それは意味ですか? –

0

それはすべてあなたの文字列が最初にエンコードされたかによって決まります。しかし、基本的な考え方は、必要なパラメータを持つ変換関数を使用することです。

Encoding.GetString適切なエンコーディング方法を使用できます。あなたは、元の文字列があなたに送信される前にUTF-8形式でエンコードされたことがわかっている場合、あなたは

string converted = Encoding.UTF8.GetString(bytesReceived);

+0

にこのデータを送信するためにIPとポートを与えることができるかを知りたい場合は、再び、それはorginal値 –

+0

バイト[]のBA =のEncoding.Default.GetBytes( "$ A grQ05Ahを@ ')を返しますÿÿûÿ °〜À、¡U "); 文字列変換= Encoding.UTF8.GetString(ba); –

+0

バイトの取得にも同じエンコードを使用します。バイト配列がUTF-8データであることが分かっていれば、この例も有効です。 – Tigran

関連する問題