【发布时间】:2014-02-18 09:10:01
【问题描述】:
我正在尝试将 char 数组转换为 Byte(微软类型,我正在使用 Visual Studio)。事实上,我想为串行端口通信填写一个DCB 结构,然后我从一个.ini 文件中取回信息。数据保存在 char 临时缓冲区中。 DCB 端口设置中的某些值需要以字节为单位。我尝试了很多方法都没有成功。从 .ini 中很好地检索了数据,但我在将它们转换为字节时遇到了一些问题。
我可以将数值转换为整数,但它们也必须是字节。
并且 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。
【问题讨论】:
-
你所说的“一些问题”是什么意思,你必须具体。 “WinAPI Byte”上的简单 google 指向 MSND,其中声明 “BYTE - 一个字节(8 位)。这种类型在 WinDef.h 中声明如下:typedef unsigned char BYTE;”。我什至不确定你会遇到什么问题。
-
“一些问题”:好吧,我无法转换它:p 我还观看了带有 unisgned long 的 msdn 字节。我试图将返回的缓冲区(res)转换为无符号长缓冲区。
-
好吧@Mr。斯塔克,你似乎甚至不知道出了什么问题。你有点帮不上忙。我很想说“是的,你可以!你只需要相信自己。”但取而代之的是专业的“请发布错误消息,或预期的和实际的输出。最好使用工作 sscce。”
-
xD 我尝试了很多东西,但我总是迷失在数据类型转换中。如果你有一个额外的链接来解释我接受它;) 为了重新表述我的问题,我会说我想将一个 char 数组转换为一个 unsigne long 值。
-
您知道
GetPrivateProfileInt会为您读取这些数字,对吧?
标签: c++ byte type-conversion