none
VC里各种进制之间困惑 RRS feed

  • 问题

  • 程序使用VStdio2008创建的,程序一开始便从一个二进制文件读数据,读出来的数据放入aa123[100]数组里。二进制文件里读出的都是16进制,现在的问题是读到其中几个数据比如aa123[10]=0010,程序里用aa123[10]参与运算是把aa123[10]值当16算,可我程序需要把aa123[10]值当10算,自己按照10进制转16进制转换的原则编了个小程序,不过不对。感觉有点晕,请高人指点简洁得方法
    2010年12月13日 10:34

答案

  • Hi,all

        因为读到数据最大只有3个数位,我做了简单的计算,如下

    aa123[10]=((aa123[10]&0x0F00)>>8)*100+]=((aa123[10]&0x00F0)>>4)*10+]=((aa123[10]&0x000F)>>8)*100

    这样就把读到的3位数的BCD码转换为正常10进制了。

    再次谢谢各位的关注。

    2010年12月15日 7:59

全部回复

  • 我觉得你的思路有点乱

    如果你就是想把0x10变成10的话减6就可以

    2010年12月14日 2:26
  • 不清楚你的文件中保存的格式。也不知道你是怎么读取的,aa123数组是什么类型?char?

    对于目前的情况我觉得最简单的方法是定义一个宏

    #define Hex(Val) (0x##Val)

    每次读出文件内容后,

    aa123[10]=0010。该为

    aa123[10]=Hex(0010);


    麻烦把正确答案设为解答。
    2010年12月14日 2:54
    版主
  • Hi,all

        因为读到数据最大只有3个数位,我做了简单的计算,如下

    aa123[10]=((aa123[10]&0x0F00)>>8)*100+]=((aa123[10]&0x00F0)>>4)*10+]=((aa123[10]&0x000F)>>8)*100

    这样就把读到的3位数的BCD码转换为正常10进制了。

    再次谢谢各位的关注。

    2010年12月15日 7:59