繁体   English   中英

Arduino以太网字节大小问题

[英]Arduino Ethernet Byte size problem

我正在使用带有官方以太网屏蔽的Arduino(duemilanove)将数据发送到控制器以控制LED矩阵。 我试图通过获取桌面上32位值中的4个字节并将其作为4个连续字节发送到arduino,以将一些原始的32位无符号int值(unix时间戳)发送给控制器。 但是,无论何时字节值大于127,以太网客户端库返回的值都是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();
}

因此,只要输入字节大于127,变量“数据”最终将被设置为63! 一开始我以为问题出在进一步的问题(缓冲区以前是char而不是字节),但是当我在读取后立即打印“ data”时,仍然是63。

可能导致这种情况的任何想法? 我知道client.read()应该输出int并以uint8_t的形式从套接字内部读取数据,uint8_t是一个完整字节且无符号,因此我至少应该能够达到255 ...

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

我更倾向于怀疑发送方。 您是否确定发送端工作正常? 您是否已使用Wireshk捕获或类似方法进行了验证?

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

目前尚不清楚这可能发生在哪里。 绝对不在您的摘要中。 可能在电线的另一端。 写字节,而不是字符。

汉斯·帕桑(Hans Passant)和卡尔·比勒费尔特(Karl Bielefeldt)+1。

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

再次+1了Karl和Ben提及Wireshark。 对于调试这样的网络问题非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM