首页 > 解决方案 > 从 TCP 连接接收负数

问题描述

目前我有一个 Arduino 使用 client.write() 一个一个发送 8 个字节。这意味着值的范围是 0-255。

我的 C++ 应用程序与 Arduino 有一个 TCP 套接字连接,并使用以下代码接收字节:

#define DEFAULT_BUFLEN 8

struct SensorData{
     int frontSensor;
     int backSensor;
     int leftSensor;
     int rightSensor;
  };


SensorData result{};
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;

socketIdMicroprocessor = recv(clientSocket, recvbuf, recvbuflen, 0);

if (socketIdMicroprocessor > 0) {
    result.frontSensor = (int) recvbuf[0] + (int) recvbuf[1];
    result.backSensor = (int) recvbuf[2] + (int) recvbuf[3];
    result.leftSensor = (int) recvbuf[4] + (int) recvbuf[5];
    result.rightSensor = (int) recvbuf[6] + (int) recvbuf[7];

}

一切运行良好,除了我在阅读结果时得到的值。例如 frontSensor 的结果有时是 -180。这应该是不可能的,因为发送的所有值都是正数和 0-255。

我希望所有值都是 0-510,有人能解释为什么我在这里得到否定吗?

标签: c++socketstcp

解决方案


char recvbuf[DEFAULT_BUFLEN];

应该:

unsigned char recvbuf[DEFAULT_BUFLEN];

使演员阵容为int0-255。


推荐阅读