0

我必须使用十六进制数组,因为我正在做一个与视频服务器控制器通信的程序,他只理解十六进制的消息。我可以将视频控制器与我的服务器连接,但是当我尝试使用 send() 函数发送消息时,传递一个包含我的十六进制信息的无符号字符数组,它不起作用。

这就是我使用数组的方式。我不知道这是否正确。

 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;

如果你说“没什么”,你是对的。

分配整数值时,为八进制指定0x,00或为十进制指定 none 对实际存储的内容没有影响。这只是为您提供方便,仅限程序员。这些是我们正在谈论的整数变量——它们只存储数字数据。他们不存储或关心基数。事实上,您可能会惊讶地发现,当您将数值赋给整数变量时,实际存储的不是十进制或十六进制甚至八进制,而是二进制。

由于您将这些值存储为unsigned char, 和char(unsigned或其他方式) 实际上只是一个整数类型,所以您正在做的事情很好:

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

但你的问题没有意义:

任何人都知道使用 unsigned char 数组是否是存储十六进制的正确方法?

于 2013-10-29T17:23:50.347 回答