将两个UInt16值转换为一个UInt32值考虑最少和最重要的单词

时间:2013-08-07 13:19:15

标签: c# type-conversion uint32 uint16

我有两个UInt16值

private UInt16 leastSignificantWord;
private UInt16 mostSignificantWord;

这两个单词(UInt16值)来自一个组件,它将UInt32状态/错误值分成两个单词并返回这两个单词。现在我需要回到UInt32值。把这两个词加在一起是不行的,因为无论是最重要还是最不重要的。

例如:

 private UInt16 leastSignificantWord = 1;
 private UInt16 mostSignificantWord = 1;

//result contains the value 2 after sum both words
//which can not be correct because we have to take note of the most and least significant
UInt32 result = leastSignificantWord  + mostSignificantWord;

有没有办法解决这个问题?说实话,我从来没有在c#中使用位/字节,所以我从来没有遇到过这样的问题。提前致谢

1 个答案:

答案 0 :(得分:3)

private UInt16 leastSignificantWord = 1;
private UInt16 mostSignificantWord = 1;

UInt32 result = (leastSignificantWord << 16) + mostSignificantWord;

你有2个UInt16(16位和16位) 一个0010 1011 1010 1110和第二个1001 0111 0100 0110

如果您将此2 UIn16作为一个UInt32阅读,您将获得0010 1011 1010 1110 1001 0111 0100 0110

因此,(leastSignificantWord << 16)为您提供0010 1011 1010 1110 0000 0000 0000 0000,此加mostSignificantWord为您提供0010 1011 1010 1110 1001 0111 0100 0110

这些可能会有所帮助

http://msdn.microsoft.com/en-us/library/a1sway8w.aspx

What are bitwise shift (bit-shift) operators and how do they work?