我正在尝试将char arry转换为Byte(微软类型,我正在使用visual studio)。事实是我想填写DCB结构进行串口通信,然后从.ini文件中获取信息。数据保存在char临时缓冲区中。 DCB端口设置中的某些值需要以字节为单位。我尝试了许多方法但没有成功。从.ini中可以很好地检索数据,但是我将它们转换为byte有一些问题。
我可以将数值转换为整数,但它们也必须是字节。
process-> read方法是GetPrivateProfileString的个人实现。
char res[10];
printf("\nReading port settings of %s\n", comName);
processFileConfig->read(comName, "baudrate", "9600", res, sizeof(res));
baudr = atoi(res);
processFileConfig->read(comName, "parity", "N", res, sizeof(res));
parity = (BYTE)res;
std::cout << "size of Parity : ";
std::cout << sizeof(parity) <<std::endl;
std::cout << "content of Parity : ";
std::cout << parity <<std::endl;
processFileConfig->read(comName, "byteSize", "8", res, sizeof(res));
byteSize = atoi(res);
std::cout << "biteSize : ";
std::cout << byteSize <<std::endl;
processFileConfig->read(comName, "stopBits", "1", res, sizeof(res));
stopBits = atoi(res);
std::cout << "stopBits : ";
std::cout << stopBits <<std::endl;
portSettings.DCBlength = sizeof(portSettings);
portSettings.BaudRate = baudr; //this one is OK
portSettings.ByteSize = byteSize; // returns
portSettings.Parity = parity; // returns nothing
portSettings.StopBits = stopBits; // returns a smiley :)
我的file.ini
的一个例子:
[COM1]
baudrate=15000
byteSize=8
stopBits=1
parity=N
编辑:res缓冲区从.ini返回好的值。这一切都很好。我只需要将最后三个值(byteSize,stopBits和parity)转换为unsigned long。
答案 0 :(得分:2)
您当前的代码尝试将指向缓冲区的指针转换为BYTE
。您需要做的是使用strtoul()
解析缓冲区,并将 转换为BYTE
。
答案 1 :(得分:0)
好的,我明白了。终于很容易,我不知道为什么我阻止它^^ 我创建了一个中间名unsigned long var:
processFileConfig->read(comName, "parity", "N", res, sizeof(res));
unsigned long parity_ul = res[0];
parity = parity_ul;
std::cout << "parity : "; // 78 for 'N'
std::cout << parity <<std::endl;
portSettings.Parity = parity;
std::cout << "Parity : ";
std::cout << portSettings.Parity <<std::endl; // 'N' that's OK !
我对其他无符号值做了同样的事情。我直接得到atoi(res)到无符号long值的隐式转换(我认为这是术语)。根据VS调试器,在portSettings中正确输入值,但是当我尝试打印它时,它会失败。这并不完美,但如果代码有效,我认为没问题。
感谢大家