0

ビデオサーバーコントローラと通信するプログラムを実行していて、16 進数のメッセージしか理解できないため、16 進数の配列を使用する必要があります。ビデオ コントローラーをサーバーに接続できますが、send() 関数を使用してメッセージを送信しようとすると、情報が 16 進数で含まれる unsigned char の配列が渡されますが、機能しません。

これが私が配列を使用する方法です。それが正しいかどうかはわかりません。

 void sendMessage()
        {
               int retorno;
           CString TextRetorno; 
               unsigned char HEX_bufferMessage[12]; // declaration

            // store info
                HEX_bufferMessage[0] = 0xF0;
                HEX_bufferMessage[1] = 0x15;
                HEX_bufferMessage[2] = 0x31;
                HEX_bufferMessage[3] = 0x02;
                HEX_bufferMessage[4] = 0x03; 
                HEX_bufferMessage[5] = 0x00;
                HEX_bufferMessage[6] = 0x00; 
                HEX_bufferMessage[7] = 0xD1; 
                HEX_bufferMessage[8] = 0xD1; 
                HEX_bufferMessage[9] = 0x00;
                HEX_bufferMessage[10] = 0x00;
                HEX_bufferMessage[11] = 0xF7;

        retorno = send(sckSloMo, (const char*) HEX_bufferMessage, sizeof(HEX_bufferMessage), 0); 

                TextRetorno.Format("%d", retorno);
                AfxMessageBox(TextRetorno); // value = 12

                if (retorno == SOCKET_ERROR)
                {
                    AfxMessageBox("Error Send!! =[ ");
                    return;
                }



            return;

            }
4

1 に答える 1

1

ポップクイズ。次の違いは何ですか:

int n = 0x0F;

と:

int n = 15;

あなたが「何もない」と言ったなら、あなたは正しいです。

整数値を割り当てる場合、8 進数の場合は , を指定し0x0010 進数の場合は何も指定しなくても、実際に格納される内容に違いはありません。これはプログラマにとってのみ便利です。これらは整数変数で、数値データのみを格納します。それらは基数を保存したり気にしたりしません。実際、数値を整数変数に割り当てたときに、実際に格納されるのは 10 進数でも 16 進数でも 8 進数でもなく、2 進数であることを知って驚くかもしれません。

これらの値をunsigned char, and char(unsignedまたはそれ以外) として保存しているので、実際には単なる整数型なので、あなたがしていることは問題ありません:

HEX_bufferMessage[0] = 0xF0;
HEX_bufferMessage[1] = 0x15;
HEX_bufferMessage[2] = 0x31;

しかし、あなたの質問は意味がありません:

unsigned char の配列を使用することが 16 進数を格納する正しい方法であるかどうかは誰でも知っていますか??

于 2013-10-29T17:23:50.347 に答える