【发布时间】:2013-12-27 08:44:03
【问题描述】:
我有如下的 c++ 代码来显示 int 数组中的十六进制值。
#include <iostream>
using namespace std;
int main()
{
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};
char temp[255]={0};
for (int i=0; i<32; i++)
{
sprintf(&temp[strlen(temp)], "%d", binText[i]);
}
char HexBuffer[255];
unsigned long long int Number = 0;
int BinLength = strlen(temp);
for(int i=0; i<32; i++)
{
Number += (long int)((temp[32 - i - 1] - 48) * pow((double)2, i));
}
ltoa(Number, HexBuffer, 16);
cout << HexBuffer <<endl;
}
它的输出是:af1af5f1 所以这段代码将存储在 int 数组中的二进制数字转换为十六进制值。
但是当我尝试使用相同的代码在使用 win32 的串行通信中发送十六进制值时。它没有发送正确的十六进制值。代码是
serialObj.begin("COM1", 9600); //opens the port
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};
char temp[255]={0};
for (int i=0; i<32; i++)
{
sprintf(&temp[strlen(temp)], "%d", binText[i]);
}
char HexBuffer[255];
unsigned long long int Number = 0;
int BinLength = strlen(temp);
for(int i=0; i<32; i++)
{
Number += (long int)((temp[32 - i - 1] - 48) * pow((double)2, i));
}
ltoa(Number, HexBuffer, 16);
serialObj.send(HexBuffer);
serialObj.close();//closes the port
“serialObj.send(HexBuffer);”调用的“send”函数如下:
void serial::send(char data[])
{
DWORD dwBytesWrite;
WriteFile(serialHandle, data, 4, &dwBytesWrite, NULL);
}
但它发送的数据是:“61 66 31 61”。我无法弄清楚它为什么给出这个输出。
“send”函数“serialObj.send”适用于以下代码
char str[4]={0x24,0x24,0x53,0x3F};
serialObj.send(str);
它发送 24 24 53 3F。
所以我想从上面存储在 int 数组中的二进制数字发送 AF 1A F5 F1(如上所示)。我该怎么做呢
【问题讨论】:
标签: c++ winapi binary serial-port hex