代码之家  ›  专栏  ›  技术社区  ›  zvi

XML表示XML文件中的位

  •  1
  • zvi  · 技术社区  · 11 年前

    我有一个8位的数字,其中的每一位都代表一些数据。

    例如:

    01101100
    

    第1位( 0 )-表示某种旗帜,第二个( 1 )-另一面旗帜等。

    我想将所有数据保存在XML文件中,最好的方法是什么?

    这就是我现在所拥有的:

    <bit1 Description="Y axis">
      <x1>    Y axis enabled</x1>
      <x0>    Y axis disabled</x0>
    </bit1>
    <bit0 Description="X axis">
      <x1>    X axis enabled</x1>
      <x0>    X axis disabled</x0>
    </bit0>
    

    谢谢

    3 回复  |  直到 11 年前
        1
  •  0
  •   Stefano Falasca    11 年前

    我想说,xml是这里最后一个关注的问题。问题是您希望如何对数据进行建模。如果您对比特表示法满意,那么只需编写实际数字(在您的示例中为01101100)。如果相反,正如你的问题所暗示的那样,你想要一种更结构化的表达方式,你首先应该考虑一个结构。

    例如(我使用c作为例子,任何语言都可以),需要表示8位的合理结构(逻辑上)可以是:

    struct Flags{
        struct Axis{
            bool enabled;
            bool present;
        };
        Axis axes[3];
    
        bool invertAllDirections;
        bool movementsEnabled;
    };
    

    其可以被翻译成具有以下形式的xml:

    <Flags>
        <Axes>
            <X>
                <Enabled>False</Enabled>
                <Present>True</Present>
            </X>
            <Y>
                <Enabled>True</Enabled>
                <Present>False</Present>
            </Y>
            <Z>
                <Enabled>True</Enabled>
                <Present>True</Present>
            </Z>
        </Axes>
        <invertAllDirections>False</invertAllDirections>
        <movementsEnabled>False</movementsEnabled>
    </Flags>
    
        2
  •  0
  •   zvi    11 年前

    不确定你是否理解我的要求(如果我不清楚,很抱歉):我想表示大量的寄存器,所以每个寄存器都可以不同(=不同的位)。

    无论如何,这就是我要做的(声明寄存器中的每个字段有多少位):

    <field>
          <name>register1</name>
          <bitOffset>14</bitOffset>
          <bitWidth>18</bitWidth> 
    </field>
    

    基于 here .

    不管怎样,谢谢。

        3
  •  0
  •   Jerry Miller    7 年前

    在我看来,C和XML都没有反映数据的逐位性质,因此它的实用性取决于表示的目的。在C中,bool通常是一个0或非零的int,而并集成员: int变量名称:1; 将准确地反映其性质,同时引入包装的复杂性(#pragma pack 1)和Endianness(#if __BYTE_ORDER==__BIG_ENDIAN)。只要知道你想完成什么,以及所选择的表示是否足以达到这个目的,例如,如果数据是低级别消息的一部分,并且假设网络字节顺序(NBO)。