c - 如何在 C 语言中将二进制字符串复制到结构体或从结构体复制二进制字符串。

标签 c struct binary

我有一个可执行文件,它是一个小机器人,应该遵循一条线,我的工作是编写 C 代码来命令它。我的问题是从机器人程序本身获取数据并将其发送回来。

指令使用 8 位二进制代码来回和第四次传递给软件,我有这两个结构来处理数据。

typedef struct
{
    unsigned speed:4;
    unsigned inv_right_wheel:1;
    unsigned right_wheel:1;
    unsigned inv_left_wheel:1;
    unsigned left_wheel:1;
} INPUT;

typedef struct
{
    unsigned char unused:2;
    unsigned char capt_left:1;
    unsigned char capt_right:1;
    unsigned char cont_back_right:1;
    unsigned char cont_front_right:1;
    unsigned char cont_back_left:1;
    unsigned char cont_front_left:1;
} OUTPUT;

为了找到二进制代码的地址所在的位置,我有一个像这样的小函数REGISTER(0xE001)(它的类型是static volatile unsigned char * REGISTER(unsigned Short address) )) 返回要查找的地址。

我的主要内容如下:

int main() { 
    OUTPUT  *out;
    INPUT   *in;

    out = REGISTER(0xE001);


    printf("%d", out.capt_left);
    return EXIT_SUCCESS;

}

最佳答案

嵌入式乐趣。如果您希望机器人与您进行通信,它必须具有某种 API 或它使用的寄存器。现在,系统寄存器 0x​​E001 是告诉您有关输出的地方。如果该寄存器是读/写的,您可以执行以下操作:

out->capt_left = 1;

如果您通过 INPUT 进行通信(逻辑上是这样认为),您需要找到 INPUT 寄存器所在的位置。这将在您的文档中的某个位置。你会这样做:

in = (REGISTER(0xE000));   // Guessing on Register location.
in->speed = 1;
...

这是否让您知道从哪里开始?顺便说一句,您很有可能希望一次将整个字节写入输入,这样:

INPUT buffer;

buffer.speed = 1;
buffer.inv_right_wheel = 0;
...

*in = buffer;

甚至:

*(REGISTER(INPUT_REGISTER)) = 0x4F;  // Speed to 4, all other bits set true - maybe depending on bitfield order!

希望这有帮助!

关于c - 如何在 C 语言中将二进制字符串复制到结构体或从结构体复制二进制字符串。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16820556/

相关文章:

c - 如何防止 C 语言操作中的位大小提升?

c - Linux 和 Windows 初始化结构体的方式不同

c - 如何比较结构数组中的字符串?

c - 为什么 0x1 被解释为小于 0xC0000000?

algorithm - 非恢复有符号整数除法后校正

c - NMEA校验和计算计算

c++ - 通过宏检查错误

c - 下标值既不是数组也不是指针

c - 复制二进制文件时何时使用 int 与 char 作为缓冲区?

c - gtk+ v3 将控制权返回给 main 进行重绘