我必须使用十六进制数组,因为我正在做一个与视频服务器控制器通信的程序,他只是理解十六进制的消息。我可以将视频控制器与我的服务器连接,但是当我尝试使用send()函数发送消息时,传递一个包含我的十六进制信息的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;
}
答案 0 :(得分:1)
流行测验。有什么区别:
int n = 0x0F;
和
int n = 15;
如果你说“什么都没有,”你是对的。
分配整数值时,为八进制指定0x
,00
,或为十进制指定任何内容,不会对实际存储的内容产生任何影响。这对程序员来说只是方便。这些是我们正在谈论的整数变量 - 它们只存储数字数据。他们不存储或关心基数。实际上,您可能会惊讶地发现,当您将数值赋给整数变量时,实际存储的内容不是十进制或十六进制,甚至是八进制 - 它是二进制的。
由于您将这些值存储为unsigned char
,而char
(unsigned
或其他)实际上只是一个整数类型,那么您正在做的事情很好:
HEX_bufferMessage[0] = 0xF0;
HEX_bufferMessage[1] = 0x15;
HEX_bufferMessage[2] = 0x31;
但你的问题毫无意义:
任何人都知道使用unsigned char数组是否正确 存储十六进制??