32进制数如何实现,难点在哪里?

解决方案 »

  1.   

    //视读不方便而已,SA12K,估计得看上(算上)半天才行。
      

  2.   

    大进制是有用的,可以减小容量,换句话说就是减少字节数。
    例如10进制的4095用16进制表示就是FFF,这样就减少了一个字节,
    而FFFF=65535,可以看到,如果是四个字节,10进制只能表示9999个数,而16进制可以表示65535个数字。
    不要小瞧这一个字节,在实际应用中非常有用的,例如实时语音数据传输,用speex窄带编码,一帧320个字节的数据编码压缩之后是38个字节,而如果这个时候加上帧头(也就是给每个不同的来源唯一编号),如果用16进制就可以节省一个字节的数据,而在这里一个字节意味着带宽至少减少0.5Kbps
    作用是相当巨大的,如果有32进制或者更高的进制就可以用更少的字节表示更多的数字。
      

  3.   

    itoa可以转换2~36进制。
    char p[10]={0};
    itoa(46655,p,36);
    cout<<p<<endl;
      

  4.   


    UInt64的最大值16进制是 FFFF FFFF FFFF FFFF (共占16个字符),而32进制是 F VVVV VVVV VVVV (共占13个字符),其实就只能省3位,而且最高一位是F(并不是最大的V),所以第一位基本是浪费的。
    如果需要将长度缩短一半只能使用16*16(256)进制,但是作为一个8bit字节而言,最大能表达的也就是256个字符,而且很多是不可见的,而且真的采用到了256进制的话还不如直接传字节流更加实际,所以再高的进制是不实际的。
    但是无可厚非,32进制的确能压缩数值在可见字符上的量,例如作为有限长度的订单编号上附加的时间戳,如果采用毫秒来计算,以现在的年数来算,十进制表达已经是非常长的数字了,所以可以选择转换成16或者32进制来尽可能压缩其可见字符的长度来充分利用那些位数。
    其实当前常见的Base64编码就是一个64进制的编码,只不过Base64编码是大小写敏感的,如果用在大小写不敏感的场合的话,最多可能就只能用到36进制了。