oracle 16进制转换为2进制

落幕年代 2017-10-18 04:11:23
oracle 16进制如何转换为2进制;用语句怎么写
如FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFF 转换为二进制语句怎么写?谢谢
...全文
1513 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2017-10-19
  • 打赏
  • 举报
回复
完整的解决方案是:

--1.创建自定义函数
create or replace function number_to_bit(v_num number)
return varchar is v_rtn varchar(200);--注意返回列长度
v_n1 varchar(200);
v_n2 number;
begin
v_n1 := v_num;
loop
v_n2 := abs(mod(v_n1, 2));
v_n1 := to_char(abs(trunc(v_n1 / 2)));
v_rtn := to_char(v_n2) || v_rtn;
exit when v_n1 = 0;
end loop;

--返回二进制长度
return v_rtn;

end number_to_bit;

--2.SQL实现
select number_to_bit(to_char(to_number('FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFF','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'))) from dual;
落幕年代 2017-10-19
  • 打赏
  • 举报
回复
引用 8 楼 qq646748739 的回复:
上面语句to_number的结果为3.4024082854607E38,再用to_char转换下: 340240828546070184842346363461134450687 SQL调整为:

select number_to_bit(to_charto_number('FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFF','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'))) from dual;  
大侠 帮忙写个整体的SQL 语句
落幕年代 2017-10-19
  • 打赏
  • 举报
回复
引用 8 楼 qq646748739 的回复:
上面语句to_number的结果为3.4024082854607E38,再用to_char转换下: 340240828546070184842346363461134450687 SQL调整为:

select number_to_bit(to_charto_number('FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFF','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'))) from dual;  
执行报错了 大侠
碧水幽幽泉 2017-10-19
  • 打赏
  • 举报
回复
上面语句to_number的结果为3.4024082854607E38,再用to_char转换下: 340240828546070184842346363461134450687
SQL调整为:

select number_to_bit(to_charto_number('FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFF','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'))) from dual;
落幕年代 2017-10-19
  • 打赏
  • 举报
回复
引用 4 楼 wmxcn2000 的回复:
初级方法一个: result varchar(1000) := ''; loop -- 逐个字符处理 --配合 decode 函数, 把 0 - F 都列举出来,一共才16 个。 result := result || decode(字符, '0' , '0000', '1' , '0001', …… 'E' , '1110', 'F' , '1111') end loop;
大侠 你这个自定义函数怎么写啊
落幕年代 2017-10-19
  • 打赏
  • 举报
回复
引用 3 楼 qq646748739 的回复:
转成十进制后长度为39,number最大支持38位。所以需要改成类型 v_n1 varchar2(100); v_n2 varchar2(100);
return varchar is v_rtn varchar(129);--注意返回列长度 这里要要改129才不报哪个错,但是结果是 1111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000-1 很明显是错误的
碧水幽幽泉 2017-10-19
  • 打赏
  • 举报
回复
如果没问题的话,此楼结贴!
碧水幽幽泉 2017-10-19
  • 打赏
  • 举报
回复
没问题的话,此楼结贴!
碧水幽幽泉 2017-10-19
  • 打赏
  • 举报
回复
引用 12 楼 落幕年代的回复:
11111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 这样的结果也错的吧 [quote=引用 11 楼 qq646748739 的回复:] 完整的解决方案是:


 
--2.SQL实现
select number_to_bit(to_char(to_number('FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFF','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'))) from dual;
[/quote] 这个值是二进制,正确的。你可以手动转成十进制看下。
落幕年代 2017-10-19
  • 打赏
  • 举报
回复
11111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 这样的结果也错的吧
引用 11 楼 qq646748739 的回复:
完整的解决方案是:


 
--2.SQL实现
select number_to_bit(to_char(to_number('FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFF','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'))) from dual;
卖水果的net 2017-10-18
  • 打赏
  • 举报
回复
初级方法一个: result varchar(1000) := ''; loop -- 逐个字符处理 --配合 decode 函数, 把 0 - F 都列举出来,一共才16 个。 result := result || decode(字符, '0' , '0000', '1' , '0001', …… 'E' , '1110', 'F' , '1111') end loop;
碧水幽幽泉 2017-10-18
  • 打赏
  • 举报
回复
转成十进制后长度为39,number最大支持38位。所以需要改成类型
v_n1 varchar2(100);
v_n2 varchar2(100);
落幕年代 2017-10-18
  • 打赏
  • 举报
回复
引用 1 楼 qq646748739 的回复:
解决思路:
1.先将十六进制的数转成十进制。
转换可以用to_number函数
2.再将十进制转成而进制。
Oracle没有提供系统预定义的函数,因此需要自定义一个


执行 提示错误
碧水幽幽泉 2017-10-18
  • 打赏
  • 举报
回复
解决思路:
1.先将十六进制的数转成十进制。
转换可以用to_number函数
2.再将十进制转成而进制。
Oracle没有提供系统预定义的函数,因此需要自定义一个

--自定义十进制转二进制函数
create or replace function number_to_bit(v_num number)
return varchar is v_rtn varchar(8);--注意返回列长度
v_n1 number;
v_n2 number;
begin
v_n1 := v_num;
loop
v_n2 := mod(v_n1, 2);
v_n1 := abs(trunc(v_n1 / 2));
v_rtn := to_char(v_n2) || v_rtn;
exit when v_n1 = 0;
end loop;
--返回二进制长度
select lpad(v_rtn,8,0) into v_rtn from dual;
return v_rtn;
end number_to_bit;

解决方法:
select number_to_bit(to_number('FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFF','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')) from dual;
二进制文件转换,Passolo 是目前世界上最流行的软件本地化专业工具之一。它支持众多文件格式,包括可执行程序文件、资源文件和基于 XML 的文件。文本可以被翻译为多种语言,包括亚洲语系(Unicode 码)以及书写方式为从右向左的语言,比如希伯来语和阿拉伯语。 可用 Passolo 本地化的文件格式一览表 Windows 标准资源 (32 位和 64 位)二进制文件 (EXE, DLL, OCX, SYS...)Windows 标准资源 (16 位,比如 Windows 3.1) 二进制文件 (EXE, DLL, SYS...)Windows 标准资源RC 文件 (RC, RC2, DLG...) Windows CE, Pocket PC 移动设备二进制文件 (EXE, DLL...) * XML 文件 包括 XLIFF 文件 (支持 XLIFF) * Microsoft .NET 资源 (Framework 1.x 到 3.x/WPF) 二进制文件 (EXE, DLL, 程序集) 资源文件 (RESX, RESOURCE...) * Borland Delphi/C++ Builder 二进制文件 (EXE, DLL, BPL) (包括对话框和菜单编辑器) * Java 资源 (所有平台 J2EE, J2SE 和 J2ME) 属性文件,源文件,二进制文件,方案文件 * Palm 操作系统软件 * ODBC 数据库解析器 支持 ACCESS, Excel, SQL 服务器, Oracle, MySQL, IBM DB2 * Visual BASIC 6 二进制文件 * Visual BASIC 6 方案 (VBP) 和窗体 (FRM) 支持 WYSIWYG 编辑器以及从代码中提取文本 * 通用文本文件解析器 支持许多不同的文件格式和编码 * 可移植对象文件 (PO) 解析器 * Microsoft Installer 文件解析器 支持所有 MSI 文件中的表 * Microsoft Excel 文件解析器 支持所有 Excel 文件中的表单 * XLIFF 配置文件 WYSIWYG 编辑器给 Windows 资源 * 用户定义的文件格式 高度结构化的文本文件和二进制文件

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧