将char转换为字节c ++

时间:2014-02-18 09:10:02

标签: c++ byte type-conversion

我正在尝试将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。

2 个答案:

答案 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中正确输入值,但是当我尝试打印它时,它会失败。这并不完美,但如果代码有效,我认为没问题。

感谢大家