首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从v项目理解usbjoy库中的数据结构

从v项目理解usbjoy库中的数据结构
EN

Stack Overflow用户
提问于 2015-12-04 05:50:18
回答 2查看 85关注 0票数 3

祝大家一天好。

我正在尝试做我自己的操纵杆,所以我一直在寻找参考,然后我发现了usbjoy项目从v wiki页面(http://vusb.wikidot.com/project:usbjoy)。

然后,我从网站的zip文件中找到了按钮的数据结构。

代码语言:javascript
复制
typedef struct
{
  uchar x; //Byte-0, ユ (0...255)
  uchar y; //Byte-1, Y (0...255)
        uchar z; //Byte-2, Handle-1 (0...255)
  uchar p; //Byte-3, Handle-2 (0...255)

  union {
    uchar buttons; //Byte-4, buttons 8
    struct
    {
      uchar btn1:    1; //0, 1
      uchar btn2:    1; //0, 1
      uchar btn3:    1; //0, 1
      uchar btn4:    1; //0, 1
      uchar btn5:    1; //0, 1
      uchar btn6:    1; //0, 1
      uchar btn7:    1; //0, 1
      uchar btn8:    1; //0, 1
    } b;
  } u;
        union {
    uchar but; //Byte-5, buttons 4
    struct
    {
      uchar btn9:    1; //0, 1
      uchar btn10:   1; //0, 1
      uchar btn11:   1; //0, 1
      uchar btn12:   1; //0, 1
      uchar padding: 4; //Not use
                } b;
  } w;
} t_PsxController;

我知道x和y代表左边的模拟垫,z和p代表右边的模拟垫,u和w代表按钮。我的问题是:

  1. 为什么要宣布u和w为工会?
  2. 工会内部的结构会被使用吗?
  3. t_PsxController的大小是多少?
  4. 最后,uchar btn1: 1;中的冒号和低于它的代码意味着什么?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-04 07:12:59

t_PsxController是一个大小为6个字节的结构。每个字节都编号在您发布的代码的注释中。某些行中的冒号:指示编译器将一定数量的位(在本例中为1或4)用于项,而不是整个字节。这使得每个联合只有一个字节长。

代码语言:javascript
复制
t_PsxController controller;

将声明一个名为controller的结构,您以后可以使用该结构。它有6个字节长。

若要访问结构的成员,请使用.点运算符。您使用的标识符将确定您正在访问的联合的哪个成员。例如,

代码语言:javascript
复制
controller.x = 23; // assigns a value to the byte 0
controller.u.b.btn1 = 1; // assigns a 1 to the first bit of the byte 4
uchar x = controller.u.buttons; // assigns 128 to x

您可能希望在某个时候使用指向controller的指针,特别是在传递到函数时。然后,您需要使用->运算符和.点。

代码语言:javascript
复制
t_PsxController *ctlr = controller;

ctlr->u.b.btn2 = 1; // Now ctlr->u.buttons is 192
票数 1
EN

Stack Overflow用户

发布于 2015-12-04 06:13:58

为什么要宣布u和w为工会?

你一次用八个按钮中的一个按钮,对吗?只需访问数据结构的一个成员,就可以使用.Understand,即结构和联合之间的difference。操纵杆可以使用左垫,右垫和

工会内部的结构会被使用吗?

是的,它代表不同的按钮,所以它将被使用。

t_PsxController的大小是多少?

t_PsxController是结构,结构的最大尺寸是结构所有构件的总和。

最后,在uchar btn1: 1中的冒号是什么?下面的代码是什么意思?

uchar btn1: 1的内部结构表示占用1位的无符号字符位字段。

联合uchar padding: 4的内部结构表示占用4位的无符号字符位字段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34081758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档