2013-10-29 48 views
0

我必須使用一個十六進制數組,因爲我正在執行一個程序來與視頻服務器控制器進行通信,而他只是以十六進制理解消息。我可以將視頻控制器與我的服務器連接,但是當我嘗試使用send()函數發送消息時,將包含我的信息的unsigned char數組以十六進制形式傳遞,它不起作用。這是我如何使用數組。我不知道這是否正確。如何在數組內存儲十六進制數? C++ MFC

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; 

      } 
+1

不是不重要的,但你需要回去學習一些基本知識。十六進制是一種「顯示」數字值的方式。這不是一種變量。我認爲一旦你理解了基本知識,你的問題就會變得更加清晰。祝你好運。 – Jay

+0

也許你只需要這個:'send(sckSloMo,「F0153102030000D1D10000F7」,11,...'。這取決於你的意思是「視頻服務器控制器只是以十六進制理解消息」 –

+0

Michael,我說因爲開發者手冊,我收到說,這些消息是十六進制的,即使是那些我的服務器從控制器收到的。 有了這條消息,我試圖在視頻控制器屏幕上畫一個矩形。你說過,傳遞函數send()函數將一個字符串與消息結合起來,但它不會畫出矩形。 – user2928858

回答

1

流行測驗。有什麼區別:

int n = 0x0F; 

和:

int n = 15; 

如果你說, 「沒什麼,」 你是正確的。

當分配積分值時,爲八進制指定0x,00,或者對於小數點不指定任何值,這對實際存儲的內容沒有影響。這對您來說只是程序員的一種方便。這些都是我們正在討論的整數變量 - 它們只存儲數字數據。他們不存儲或關心基數。實際上,當你將一個數值賦給一個整型變量時,你可能會驚訝地發現,實際存儲的內容不是十進制或十六進制甚至八進制 - 它是二進制的。

既然你存儲這些值作爲unsigned charcharunsigned或其他方式)實際上只是一個整數類型,那麼你在做什麼是好的:

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

,但你的問題是沒有意義的:

任何人都知道,如果使用無符號字符數組是正確的方式 存儲十六進制?

+0

好的,謝謝!! =) – user2928858

相關問題