Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Arduino以太网字节大小问题_C++_C_Arduino_Ethernet - Fatal编程技术网

C++ Arduino以太网字节大小问题

C++ Arduino以太网字节大小问题,c++,c,arduino,ethernet,C++,C,Arduino,Ethernet,我使用带有官方以太网屏蔽的Arduino(duemilanove)将数据发送到控制器,以控制LED矩阵。我试图将一些原始的32位无符号int值(unix时间戳)发送到控制器,方法是将桌面上32位值中的4个字节作为4个连续字节发送到arduino。但是,每当字节值大于127时,ethernet客户端库返回的值为63 下面是我在arduino方面所做工作的一个基本示例。为了保持整洁,有些东西被移走了 byte buffer[32]; memset(buffer, 0, 32); int data;

我使用带有官方以太网屏蔽的Arduino(duemilanove)将数据发送到控制器,以控制LED矩阵。我试图将一些原始的32位无符号int值(unix时间戳)发送到控制器,方法是将桌面上32位值中的4个字节作为4个连续字节发送到arduino。但是,每当字节值大于127时,ethernet客户端库返回的值为63

下面是我在arduino方面所做工作的一个基本示例。为了保持整洁,有些东西被移走了

byte buffer[32];
memset(buffer, 0, 32);

int data;
int i=0;

data = client.read();
while(data != -1 && i < 32)
{
  buffer[i++] = (byte)data;
  data = client.read();
}
字节缓冲区[32];
memset(缓冲区,0,32);
int数据;
int i=0;
data=client.read();
而(数据!=-1&&i<32)
{
缓冲区[i++]=(字节)数据;
data=client.read();
}
因此,只要输入字节大于127,变量“data”就会被设置为63!起初我以为问题出在后面(缓冲区过去是字符而不是字节),但当我在读取后立即打印“数据”时,它仍然是63

你知道这是什么原因吗?我知道client.read()应该输出int,并在内部以uint8_t的形式从套接字读取数据,uint8_t是一个全字节且无符号,因此我应该至少能够转到255


编辑:没错,汉斯。没有意识到Encoding.ASCII.GetBytes只支持前7位,而不是全部8位。

我更倾向于怀疑传输端。你确定传输端工作正常吗?您是否用wireshark捕获或类似的方法进行过验证?

63是的ASCII码?。这些值有一定的相关性,对于大于127的值,ASCII没有字符代码。ASCII编码器通常用问号替换像这样的无效代码。例如.NET Encoding.ASCII编码器的默认行为


这可能发生在哪里还不清楚。绝对不是在你的片段中。可能在电线的另一端。写字节,而不是字符。

+1用于Hans Passant和Karl Bielefeldt

你能不用编码就发送数据吗?数据是如何发送的?TCP/UDP/IP/Ethernet绝对支持无限制地发送二进制数据。如果这是不可能的,也许将数据转换为十六进制可以解决问题。Base64也可以(更好)工作,但工作量要大得多。对于少量数据,十六进制可能是最简单、最快的解决方案


+我再次感谢卡尔和本提到了线鲨。对于调试这样的网络问题非常有价值。

但请注意,数据不能是一个字节,因为255与EOF之间存在歧义。UTF-8编码不会给出63。。。输入63是否也会输出63?后续字节是否发生移位。