2017-09-18 3 views
-5

パケット "010001e0c000011000000004f1517431ef9"(wiresharkからコピーされた)の16進ストリームを持ちます。今私のコードでこの16進ストリームを使用してパケットを作成しようとしています。しかし、この16進ストリームをCharバッファにコピーすると、ASCIIに変換されます。続いてコードがあります。私のコードからHexストリームをネットワークに送りたい。どのようにバッファに16進ストリームを正しくコピーする方法を示すことができますか?ネットワークを介して送信されるcharバッファ内のhexstreamをコピーします。

現在のコード:

char buffer1[70]; 
strncpy (buffer1,"010001e0c000011000000004f1517431ef9",60); 
+2

あなたはここからASCIIで始まりますが、あなたの質問はあまり意味がありません。 – Mat

+1

どうかしようとすると '\ x01 \ x00 \ x01 \ xec'など... –

+0

@Mat:私は利用可能な16進ストリームをコピーして送信しようとしています。しかし、私はヘキサ・ストリームとしてそれをコピーする方法を知らない。上記のコードでは、16進ストリームを文字列として "buffer1"にコピーします。 – dimley

答えて

0

あなたがWiresharkのからそれをコピーしたときは、文字列にバイナリコンテンツを変換しました。結果は、16進形式のバイナリデータを表す文字列です。

変換を逆にする代わりに、データをコピーするのに適切なメトプを使用する必要があります。 Wiresharkの機能「XXXストリームに従ってください」を試して、「C配列」の表現を取ってください.XはTCPまたはUDPを表します。

EDIT

Youがalso Cのstringをtakesおよびbinary dataへこのstringをconverts functionをwriteでき。

uint8_t GetByte(const char* pHexByte) 
{ 
    char c = pHexByte[0]; 
    uint8_t Result = (c <= '9') ? c - '0' : c - '@'; 
    c = pHexByte[1]; 
    Result = (Result << 4) | (c <= '9') ? c - '0' : c - '@'; 
    return Result; 
} 

bool_t HexStringToBinary(uint8_t *pBinary, size_t BufferSize, const char*pHexString) 
{ 
    while (pHexString[0] && pHexString[1]) 
    { 
     uint8_t DataByte = GetByte(pHexString); 

     if (!BufferSize) return FALSE; 
     *pBinary++ = DataByte; 
     BufferSize--; 
     pHexString += 2; 
    } 

    return TRUE; 
} 
+0

あなたの答えは要件を満たしています。しかし、 "16進形式のバイナリデータを表す文字列"に変換することは可能ですか? cのバイナリデータに? – dimley

関連する問題