- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试在 Raspberry Pi(使用 C 编程)和 Arduino(使用 Arduino IDE)之间发送和接收数据。
根据我在互联网上可以找到的内容,它指出两者都是小端格式。
我在 teuniz.net/RS-232 上使用串行通信 (RS232) 和库“RS-232 for Linux and Windows”在它们之间发送整数
据我所知,如果两者都是小端格式,我不需要对位进行任何移位。然而,在我使用以下代码的情况下,我需要移动 Arduino 读取的位。我不确定为什么当两者都是小端时我需要执行位移(为了获得正确的数据)。事不宜迟....
C 代码:
unsigned char buf[4];
int g = 100;
memcpy(buf, (char*)&g, sizeof(int));
// port 24 for ttyACM0
if(RS232_SendBuf(24, buf, sizeof(int)) == -1)
{
// error processing here
}
Arduino 代码:
long a[4];
long value = 0;
void loop(){
if(Serial.available()>=4){
for(int i = 0; i < 4 ; i++){
a[i] = Serial.read();
}
// Over here i need to shift the LSB of the byte received to the MSB of the long var until the MSB of byte becomes LSB of long var
// i do not have the code which is faulty right now as its already past midnight and my group mates are already asleep so I will post again in the morning
value += a[0];
value += a[1] << 8;
value += a[2] << 16;
value += a[3] << 24;
Serial.println(value); // now it prints out 100 correctly
value = 0;
}
}
感谢所有帮助!对不起,对 C 和端序还是陌生的!
更新:我想我知道为什么会发生上述情况!请在下方评论让我知道我的假设是对还是错!
我在 C 中发送 170 的 int 值。170 在 HEX 中是 0x000000aa。当我 memcpy(这是小端进入的地方)时,它被存储为 aa 00 00 00(LSB 到 MSB)。因此,当我在 arduino 中获取值时,我肯定需要进行移位,因为整数从 MSB 读取到 LSB(并且因为 arduino 中没有内存复制/读取,所以我不关心这里的任何字节顺序问题)。
但是,由于 Arduino 的处理速度很慢(它还有很多其他的东西要计算!!),我可以让我的 C 代码:
int g = 170;
unsigned char buf[4];
// below line not needed anymore??
//memcpy(buf, (char*)&g, sizeof(long));
if(RS232_SendBuf(24, (char *)&g, sizeof(int)) == -1)
{ ... }
想听更多,以便我了解更多!看来我一开始问这个问题的基础就错了!
最佳答案
我觉得你的代码没问题(我还没有运行它)。
0xaabbccdd
.dd
, cc
, bb
, aa
.他们将按照该顺序发送。a
还将包含 dd
, cc
, bb
, aa
.value
作为(dd << 0) + (cc << 8) + (bb << 16) + (aa << 24)
, 给出 0xaabbccdd
.关于C:小端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35727864/
我正在尝试在 Raspberry Pi(使用 C 编程)和 Arduino(使用 Arduino IDE)之间发送和接收数据。 根据我在互联网上可以找到的内容,它指出两者都是小端格式。 我在 teun
考虑这段代码: int a=0x10000001; char b; b=(char)a; printf("%#x \n",b); 在我的 PC 上它打印 0x01,我并不感到惊讶。它在 BIG END
我需要你的帮助。我想使用以下代码,因为我正在开发一个音频工具(仅适用于 .wav 文件),其主要功能是显示信号波形。大端和小端是我无法控制的元素。我认为以下代码解决问题的方式是正确的:- 如果音频文件
我有一个十六进制字符串,其内容为18000000,该字符串采用主机字节顺序(小端),我需要将其转换为网络字节顺序(大端)。生成的十六进制字符串将为 00000018。 总而言之,我需要转换180000
我有一个十六进制字符串,其内容为18000000,该字符串采用主机字节顺序(小端),我需要将其转换为网络字节顺序(大端)。生成的十六进制字符串将为 00000018。 总而言之,我需要转换180000
我有一个整数列表,比如说 L,它包含一个数字的二进制表示。列表L中的每个整数可以是0或1。“最低有效位”在左边(不是在右边)。 示例:1000001111 代表(十进制)数字 961,或 011101
我有来自实验的Base64 编码数据。所以我想逐步做的是: 从 base64 编码中检索字节(解码) 将字节转换为小端 从 (zlib) 中解压字节 字节数组转 float 组 示例: Dn3LQ3n
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
解码字节时,binary.Read()要求您指定该操作的预期字节顺序。 binary.Read() 还允许您传入结构,但据我所知,它使用相同的字节顺序将字节流解码到结构中的每个字段中。 当编码整数的字
我将 24 位单声道音频 .wav 文件读入 > 7) * 255 data = a.view('
我正在解码一个二进制文件,它有用四个字节表示的十进制数字,小端。例如,94 53 F0 40代表 7.510202。不幸的是,Python 给了我 7.51020240784。 当我尝试使用 unpa
这种传输语法中的数据是如何组织的?来自标准的描述: This Transfer Syntax applies to the encoding of the entire DICOM Data Set.
我是一名优秀的程序员,十分优秀!