2

这是我没想到的。我需要编写一个通过串行端口发送值的小应用程序,但值超过 127。查看此处的 Qt 文档:http: //qt-project.org/doc/qt-5.1/qtserialport/qserialport.html - 除非我遗漏了一些明显的东西,否则 QSerialPort::write() 方法似乎不支持高于 127(十进制)的任何内容。

例如,我碰巧需要发送 0xFF(十进制 255),所以当这些方法似乎只支持“签名”字符时,我该如何发送(同样,除非我遗漏了什么)。我正在寻找一个接受“int”或无符号字符的 write() 方法版本,它可以让我在十进制中达到 255。

virtual qint64  writeData(const char * data, qint64 maxSize)

看,没有“unsigned char *”,也没有“int”,那么我如何发送一个包含 5 个值的数组,其中每个值都高于 127(dec)?

4

2 回答 2

1

您仍然可以发送值大于 127 的字节。signed char 类型只是意味着您的数据作为有符号字符数组传递给方法(因此 fe unsigned 250 等于 signed -6 但二进制均为 250)。

字符 *ptr = 新字符 [5]; 指针[0] = 255;ShowMessage((int)ptr[0]);

从一开始就:

首先查看这篇 wiki 文章:http ://en.wikipedia.org/wiki/Two's_complement (专注于 8 位二进制补码整数表)

2 的补码是负值写入计算机内存的方式。

现在:

二进制代码中的值 255 写为 1111 1111。2 的补码中的值 -1 也写为 1111 1111。

因此,char 的 unsigned 或 signed 类型告诉您的编译器如何处理这些值(作为有符号或无符号)。

现在,当您尝试从 char 或 unsigned char 转换为整数时会发生什么。

现在将 unsigned char 转换为 int:您的编译器1111 1111 视为 255 并将其转换为 255 整数。

现在将 char 转换为 int:您的编译器1111 1111 视为 -1 并将其转换为 -1 整数。

-1 整数与 -1 char 值具有不同的二进制代码(因为符号位)。

于 2013-10-22T11:27:01.807 回答
1

它按原样发送数据,有符号或无符号是对方解释的问题。-1 有符号字节为 0xff,与 255 无符号相同。

于 2013-10-22T11:23:40.387 回答