我要生成个long型的用户ID, 这个用户ID的前32位是用户所在企业的ID,后32位是自身的ID,我怎么用企业的32位ID生成用户的64位ID,并且生成后怎么分离出32位企业ID, 
(该用户64位ID怎么通过传进来的企业ID参数,用程序递增生成,像数据库中的标示一样) 
谢谢指教

解决方案 »

  1.   

    大概楼主就是发在Asp.net板块的贴子!!
      

  2.   

    一帖多发...用位移...
    int eid = 123;
    int uid = 456;
    long id = (eid << 16) + uid;
    Console.WriteLine("eid:{0}", id >> 16);
    Console.WriteLine("uid:{0}", id - ((id >> 16) << 16));
      

  3.   

    [code=C#]// 编码:
    ulong 用户的64位ID = (ulong)企业的32位ID * uint.MaxValue + (uint)用户的32位ID;
    // 或者:
    ulong 用户的64位ID = ((ulong)企业的32位ID << 32) + (uint)用户的32位ID;
    // 解码:
    uint 企业的32位ID = 用户的64位ID >> 32;
    uint 用户的32位ID = 用户的64位ID % uint.MaxValue;
    // 或者:
    uint 用户的32位ID = 用户的64位ID & uint.MaxValue;[/code]
      

  4.   

    假定你有以下Long型的用户IDlong _userId;可以用以下方法分解:
    byte[] U_buffer   = System.BitConverter.GetBytes((long) _userId);  //把long转换为内存字节数组
    int _companyId    = System.BitConverter.ToInt32(U_buffer,0);   //得到前4字节的int企业ID
    int _shortUserId  = System.BitConverter.ToInt32(U_buffer,4);   //得到后4字节的int企业ID组合以与上类似,把_companyId和_shortUserId分别转换为2个内存字节数组,再进行数组组合,最后把这个8字节的数组转换为long数值.
      

  5.   

    3楼答案错了...更正...int eid = 123;
    int uid = 456;
    long id = (((long)eid) << 32) | uid;
    int eeid = (int)(id >> 32);
    int uuid = (int)(((long)(id >> 32 << 32)) | id);