【发布时间】:2013-12-27 12:38:03
【问题描述】:
我在 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);
现在我必须在 AF 1A F5 F1 前面附加三个十六进制字节 24 24 3F。我们如何将这些十六进制字节附加到 Number1。
“serialObj.send()”调用的“send”函数如下:
void serial::send(char data[])
{
DWORD dwBytesWrite;
WriteFile(serialHandle, data, 7, &dwBytesWrite, NULL);
}
【问题讨论】:
标签: c++ winapi binary serial-port hex