如何使两个WORD变为DWORD

时间:2009-12-17 15:56:17

标签: c#

        short val1 = short.MaxValue;
        short val2 = short.MaxValue;

        int result = val1;
        result |= val2 << 16;

        Console.WriteLine( "Result =\t" + result );         //2147450879
        Console.WriteLine( "Expected =\t" + int.MaxValue ); //2147483647

4 个答案:

答案 0 :(得分:8)

short已签名,因此最大值为0x7FFF。连接结果为0x7fff7fff而不是0x7fffffff,即2147450879.所以你所看到的实际上是正确的。

答案 1 :(得分:1)

这就是你需要的

        ushort val1 = ushort.MaxValue;
        ushort val2 = ushort.MaxValue;

        int result = val1;
        result |= val2 << 15;

答案 2 :(得分:1)

看起来像C#。简短签署。扩展为int的带符号负值将填充最左边的16位。因此,只要“val1”为负,建议的代码就会失败。

此代码有效(请注意,WORD和DWORD是无符号数量):

  public static uint MakeDWord(ushort a, ushort b) {
    return ((uint)a << 16) | b;
  }

答案 3 :(得分:0)

试试这个,类似于&lt;中的MAKEWORD windef.h&gt;:

#define MAKEDWORD(_a, _b)   ((DWORD)(((WORD)(((DWORD_PTR)(_a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(_b)) & 0xffff))) << 16))