C#和"&"运算符与指针转换一起使用

时间:2012-06-02 12:21:03

标签: c#

为什么和操作符在使用时的行为方式不同:

  1. with un unsigned int
  2. 一个字节数组在转换为(uint *)

    时重新写入相同的值
    unsafe
    {
        fixed (byte* i = new byte[4] { 0x02, 0x03, 0x04, 0xFF })
        {
            uint m = 0x020304FF;
    
            Console.WriteLine("{0:X}",m & 0xFF000000); 
    
            Console.WriteLine("{0:X}",*(uint*)i & 0xFF000000); 
         }
     }
    
  3. 结果是

         2000000
         ff000000 
    

1 个答案:

答案 0 :(得分:2)

假设32位little-endian system(与今天绝大多数计算机中的任何英特尔处理器一样),将字节数组{02 03 04 FF}的地址转换为32位int的地址将得到一个值为0xFF040302的int。因此结果。

换句话说,你假设它是“相同的值”是不正确的。