2013-12-10 29 views
0

我在Win32中以十六進制形式發送實際的二進制位。代碼是如何在實際的二進制位前添加十六進制字節

int binText[32]={1,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1}; //hex: AF 1A F5 F1 
char tempInt[255]={0}; 
for (int i=0; i<32; i++) 
{ 
    sprintf(&tempInt[strlen(tempInt)], "%d", binText[i]); 
} 
char HexBuffer[255]; 
unsigned long int Number = 0; 
int BinLength = strlen(tempInt); 

for(int i=0; i<32; i++) 
{ 
     Number += (long int)((tempInt[32 - i - 1] - 48) * pow((double)2, i)); 
} 

    //When i send using following code it sends F1 F5 1A AF 
    //serialObj.send((char *)&Number); 
    //So it is changed into big endian using following code. 

unsigned char c1, c2, c3, c4; 
c1 = Number & 255; 
c2 = (Number >> 8) & 255; //>>right shift operator 
c3 = (Number >> 16) & 255; 
c4 = (Number >> 24) & 255; 
unsigned long int Number1= ((int)c1 << 24) + ((int)c2 << 16) + ((int)c3 << 8) + c4; 

//and now following code sends AF 1A F5 F1 
serialObj.send((char *)&Number1); 

現在我必須追加三個十六進制字節24 24 3F前面的AF 1A F5 F1。我們如何將這些十六進制字節追加到Number1。

「發送」功能通過調用「serialObj.send()」是如下:

void serial::send(char data[]) 
{ 
    DWORD dwBytesWrite; 
    WriteFile(serialHandle, data, 7, &dwBytesWrite, NULL); 
} 

回答

2

代替鑄造一個指針指向一個32位變量到char *,爲什麼不裝配事情字符開始?

char buf[7] = { 0x24, 0x24, 0x3F }; // first three bytes are prefix 

如果你真的需要1和0的32 int數組轉換爲其餘四個字節,下面的循環會做它更簡潔:

char buf[7] = { 0x24, 0x24, 0x3F }; // first three bytes are prefix 

unsigned char byte = 0; 
for (int i = 0; i < 32; i++) 
{ 
    byte = (byte << 1) | binText[i]; 

    if ((i & 7) == 7) 
    { 
     buf[ 3 + (i >> 3) ] = byte; // The "3 +" part adds new bytes past the header 
     byte = 0; 
    } 
} 
serialObj.send(buf); 

然而,如果在字符串AF 1A F5 F1實際上是固定的,那麼所有你需要的是:

char buf[7] = { 0x24, 0x24, 0x3F, 0xAF, 0x1A, 0xF5, 0xF1 }; 
serialObj.send(buf); 
+0

我的binText [] int數組是不固定的。所以我必須使用你的第一個選項。我在binText []中有80 00 00 00,並使用您的代碼80 00 00 00 00 00 00發送。它不是在開始時發送24 24 3F。你可以幫我嗎? – user3048644

+0

@ user3048644:糟糕,我發了編輯錯誤。給我幾秒鐘,我會解決它。 –

+0

我想我已經將它添加了。你能解釋一下你使用按位操作做了什麼嗎?我試圖理解,但無法得到清晰的概念。如果你將它解釋得很少,它將會很有幫助...... :) – user3048644

相關問題