SELECT utl_raw.cast_from_number(100) FROM dual;
-------------
结果为:C202另:
utl_raw.cast_from_number(n IN NUMBER) RETURN RAW;小弟不了解结果是怎么转化得来的,希望各位帮帮忙。
先谢过了!
-------------
结果为:C202另:
utl_raw.cast_from_number(n IN NUMBER) RETURN RAW;小弟不了解结果是怎么转化得来的,希望各位帮帮忙。
先谢过了!
第一步:指数=第一个字节-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)
, 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