考虑以下代码:
string x="3F"; //0011 1111
string y="3F"; //0011 1111
string result="FFF";
其中x是6位,y是6位,但每一个来自不同的地方,并将它们合并为3个十六进制十进制数字是必需的操作...如何在C#中执行此操作。注意:x,y max值为3F,因此不会发生溢出。
我也需要反向操作:
string i="bc8"; //1011 1100 1000
string o1="2F";//10 1111
string o2="08";//00 1000
如何从i获得o1和o2。
感谢,
答案 0 :(得分:6)
这只是两个简单的位操作。您必须将(<<
)位移到左边六个位置,然后用或(|
)将它们移位到低六位。
uint x = 0x3f
uint y = 0x3f
uint result = x << 6 | y;
要分解,屏蔽低位并移位高六位以将它们分开。
uint orig = 0xbc8;
uint x = orig >> 6;
uint y = orig & 0x3f;
进出字符串的转换是一项额外的练习; - )
答案 1 :(得分:2)
我想说将字符串表示转换为整数 然后使用shift从2个整数构建新的int值 然后再把它串起来。
string str1 = "3F";
string str2 = "3F";
int n1 = int.Parse(str1, NumberStyles.HexNumber);
int n2 = int.Parse(str2, NumberStyles.HexNumber);
int number = (n1 << 6) | n2;
return number.TosString("X");
反向应该以类似的方式完成:
string str = "FFF";
int number = int.Parse(str, NumberStyles.HexNumber);
int n1 = number & 0x3F;
int n2 = number >> 6;