C语言中 byte n2 = (byte)((*pRun >> 4) & 0x0f); 是什么意思?
代码如下:求大师翻译下publicunsafestaticlongRunLCN(byte*pRun){byten1=(byte)(*pRun&0x0f);byten2=(...
代码如下:求大师翻译下
public unsafe static long RunLCN(byte* pRun)
{ byte n1 = (byte)(*pRun & 0x0f); byte n2 = (byte)((*pRun >> 4) & 0x0f); byte lcnCheck = (n2 == 0) ? (byte)0 : (byte)(pRun[n1 + n2]); bool negative = false; if ((0x80 & lcnCheck) == 0x80) // Negative. { negative = true; } // If the highest byte is a negative value (the highest bit is 1), than we should get a negative long value respectively. long lcn = negative ? (long)((0xffffffffffffffff << 8) | lcnCheck) : (long)lcnCheck; for (int i = n1 + n2 - 1; i > n1; i--) { lcn = (lcn << 8) + pRun[i]; } return lcn; } 展开
public unsafe static long RunLCN(byte* pRun)
{ byte n1 = (byte)(*pRun & 0x0f); byte n2 = (byte)((*pRun >> 4) & 0x0f); byte lcnCheck = (n2 == 0) ? (byte)0 : (byte)(pRun[n1 + n2]); bool negative = false; if ((0x80 & lcnCheck) == 0x80) // Negative. { negative = true; } // If the highest byte is a negative value (the highest bit is 1), than we should get a negative long value respectively. long lcn = negative ? (long)((0xffffffffffffffff << 8) | lcnCheck) : (long)lcnCheck; for (int i = n1 + n2 - 1; i > n1; i--) { lcn = (lcn << 8) + pRun[i]; } return lcn; } 展开
1个回答
展开全部
他实现的就是*prun右移四位以后 位与上0X0f 强制转换成字符型 结果赋给n2
假设*prun是0xcf 右移四位就是0x0c 位与上0x0f结果是0x0c
假设*prun是0xcf 右移四位就是0x0c 位与上0x0f结果是0x0c
追问
0x0f只是转化成字符型?不是与操作吗?
下面是我看到的解释:
byte b = i & 0x0f
如果原来的 b是: 1111111那么这个运算过程是:
11111111
00001000
&_______________
00001000
如果b的第4位(下面 8 的二进制数中为 1 的位置)是1 运算结果是1 其余是 0 也就是说 需要两个运算值的位都是 1 时 结果才是 1
追答
。。。不知道你在说什么 我说的是等号右边的(byte)是一个强制转换类型的关键字 转换后的类型是byte字符型 而且确实是只有两个字符上对应位都为1 与运算以后的结果才为一 但是0x0f 用二进制表示是0000 1111 而不是0000 1000 所以它实际上的意义只是取*prun这个字节移位后的低四位的值
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询