SELECT utl_raw.cast_from_number(100) FROM dual;
-------------
结果为:C202另:
utl_raw.cast_from_number(n IN NUMBER) RETURN RAW;小弟不了解结果是怎么转化得来的,希望各位帮帮忙。
先谢过了!

解决方案 »

  1.   

      正数的解读数字为正数,第一个字节必须大于128(0×80)
      第一步:指数=第一个字节-193
      第二步:每一个其他的数字都减1
      第三步:从基于100的指数转换到基于10的指数每一个结果通过100^(EXP-N)其中EXP是第一步中得到的指数N是数字的位置的顺序号(最高位的N=0)
      第四步:将所有的值相加
      负数的解读数字为负数,第一个字节必须小于128(0×80)
      第一步:指数=62-first bytes
      第二步:每一个数字被101减
      第三步:将基数从100转换为10每一个数字乘以100^(EXP-N)这里EXP是第一步中的指数值N是数字位置顺序值(最高位为0)
      第四步:确认尾巴上的102已经抛弃
    第五步:将所有的值相加如果数字标示超过21字节,则最后的102不被要求,oracle不会使用22字节来标示的。oracle将自己会考虑所有的字节。
    -------------------------------------------------
    100 = (0x02 - 1) * 100 ^ (0xC2 - 193 - 0)
      

  2.   

    select utl_raw.cast_to_number( 'C202182E' )
    ,  utl_raw.cast_from_number(123.45) 
     from dual Row#    UTL_RAW.CAST_TO_NUMBER('C202182E')      UTL_RAW.CAST_FROM_NUMBER(123.45)
    1       123.45                                  C202182E