24小时热门版块排行榜    

查看: 2083  |  回复: 4

chineseway

捐助贵宾 (知名作家)

离...

[求助] 请教java里如何将16进制转换成10进制,并自动识别处理成正负数

请教java里如何将16进制转换成10进制,并自动识别处理成正负数

我们的程序里有一段代码本来的目的就是将获取的一个16进制的数据转换成10进制,
下面是获取的16进制数据的一些例子:
040B
0103
04D1
00E8
FFB0   
FFBA  
FFE7   
FFD8

当获取到
040B
0103
04D1
00E8
这些数据的时候,按"正常"的16进制转成10进制,得到的都是正数的结果,都是对的
但是获取到
FFB0   
FFBA  
FFE7   
FFD8
这些数据的时候,按"正常"的16进制转成10进制,得到的是很大的正数的结果,比如FFB0会转换成

65456
但实际上这时候我想把它转换成-80

下面这段代码我们是找个朋友写的,而且有些时候处理的也不对,我对编程完全外行,想请高手帮

忙修改下.

String ph=String.valueOf(charArray[10])+String.valueOf(charArray

[11])+String.valueOf(charArray[12])+String.valueOf(charArray[13]);
                     double ph_d=0.0;
                     
                     int ph_t=Integer.parseInt(ph,16);
                     String ph_bi=Integer.toBinaryString(ph_t);
                     char[] ph_char=ph_bi.toCharArray();
                     
                     if(ph_t/100.0>513){
                             String ph_bi2="";
                             for(char obj:ph_char){
                                             if(obj=='1'){
                                                   ph_bi2+="0";
                                             }else{
                                                   ph_bi2+="1";
                                             }
                             }
                             ph_d=-(Integer.valueOf(ph_bi2,2)+1);
                     }else{
                             ph_d=ph_t/100.0;
                     }
回复此楼
如何学代理:http://emuch.net/bbs/viewthread.php?tid=274515&fpage=1
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wizardfan

至尊木虫 (著名写手)

优秀版主

【答案】应助回帖


感谢参与,应助指数 +1
chineseway: 金币+1, 谢谢 这个我知道 我要的是代码 2012-07-31 14:27:49
base 16 FFB0 = base 2 1111,1111,1011,0000
base 16 040B = base 2 0000,0100,0000,1011
from your description, it seems that when the first digit in the base 2 string equal to 1, you want a negative value and when it = 0 , you want a positive value.
If this is true it is easy, do a comparison with the threshold 1000,0000,0000,0000 which is 32768
assuming int value is the number converted from base 16 string
if (value >= 32768) return 65536 - value;
return value;
2楼2012-07-13 16:23:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wizardfan

至尊木虫 (著名写手)

优秀版主

【答案】应助回帖

★ ★ ★ ★ ★
chineseway: 金币+5, 有帮助 2012-08-01 17:33:59
String str = "FFB0"; //the HEX string
        int i = Integer.parseInt(str, 16); //the corresponding base 10 integer
        if(i>=32768) i -= 65536;
        System.out.println(i);
3楼2012-07-31 16:32:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chineseway

捐助贵宾 (知名作家)

离...

引用回帖:
3楼: Originally posted by wizardfan at 2012-07-31 16:32:52
String str = "FFB0"; //the HEX string
        int i = Integer.parseInt(str, 16); //the corresponding base 10 integer
        if(i>=32768) i -= 65536;
        System.out.println(i);

呵呵
谢谢

你这倒是个办法 但不知道是不是有什么正统的方法
我总感觉有种直接的方法 定义好数据类型后 一个函数搞定的
给你看看别人的方法

http://topic.csdn.net/u/20120713 ... 7-597b043761ab.html
如何学代理:http://emuch.net/bbs/viewthread.php?tid=274515&fpage=1
4楼2012-08-01 17:33:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wizardfan

至尊木虫 (著名写手)

优秀版主

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
chineseway: 金币+14, ★★★很有帮助, 呵呵 谢谢 2012-09-26 15:49:20
引用回帖:
4楼: Originally posted by chineseway at 2012-08-01 17:33:30
呵呵
谢谢

你这倒是个办法 但不知道是不是有什么正统的方法
我总感觉有种直接的方法 定义好数据类型后 一个函数搞定的
给你看看别人的方法

http://topic.csdn.net/u/20120713/11/c5fd8e87-c58d-4c87-a ...

我问你一句,哪种办法你更能理解?通过你的描述,你不懂编程,所以我第一个帖子解释了下原理,然后给你个大概的方案。然后你要代码,这种二进制的运算在很长的16进制转换中很快,但是要有很好的基础去理解,而这个正是你没有的(你也提到要朋友去测试了)。那这种简单易懂的就正适合你了,而且你的16进制数只有4位(<2的16次方),更不需要复杂的代码了。能抓老鼠的就是好猫
5楼2012-08-01 18:13:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 chineseway 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +3 process2012 2026-08-23 4/200 2026-08-23 12:54 by huixian257
[教师之家] 跳槽后在研项目怎么办? +5 简单化xn 2026-08-22 10/500 2026-08-23 12:38 by 简单化xn
[硕博家园] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 2JOx3r2CYEgw 2026-08-21 9/450 2026-08-23 10:44 by IXZuIJ2Q7OVy
[基金申请] 让我中一个面上吧! +12 大萍1987 2026-08-20 14/700 2026-08-23 10:30 by wrm
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 2JOx3r2CYEgw 2026-08-22 5/250 2026-08-23 07:41 by OEbVnUOu01ol
[论文投稿] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 2JOx3r2CYEgw 2026-08-22 4/200 2026-08-23 04:04 by OEbVnUOu01ol
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 2JOx3r2CYEgw 2026-08-22 7/350 2026-08-23 03:55 by OEbVnUOu01ol
[论文投稿] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 2JOx3r2CYEgw 2026-08-22 6/300 2026-08-23 03:40 by OEbVnUOu01ol
[考博] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 DpSrDtM079iu 2026-08-22 3/150 2026-08-23 00:55 by OEbVnUOu01ol
[基金申请] filecode,4个jtjc了 +13 ziyangfang 2026-08-19 16/800 2026-08-22 17:08 by WH3796
[基金申请] 今天基金会出结果吗?20260819 +16 kkkl_v 2026-08-19 17/850 2026-08-22 16:12 by 阿布Abu
[基金申请] 时间戳今天,20号变了 +5 archvillain 2026-08-20 5/250 2026-08-22 06:12 by hui_daxiao
[基金申请] 建议基金发布提前给出明确的时间点 +10 kulium 2026-08-21 13/650 2026-08-21 21:58 by alongwaytogo
[基金申请] 科研孤儿太难了 +17 我4大白菜 2026-08-20 18/900 2026-08-21 20:57 by zhangev
[基金申请] 看来今天不会放榜了? +8 chengyan1220 2026-08-21 11/550 2026-08-21 17:52 by dcqxinyang
[论文投稿] 投稿咨询 +5 wwm09 2026-08-17 7/350 2026-08-21 10:11 by 期刊论文帮手
[基金申请] 今天放榜没戏了吧 +9 yuleib84 2026-08-19 11/550 2026-08-21 10:06 by gltch
[基金申请] 基金啊基金 +4 longfie172 2026-08-20 4/200 2026-08-21 08:58 by mark mao
[基金申请] 估计是周四 +3 archvillain 2026-08-18 3/150 2026-08-21 01:48 by jnhyjjm
[基金申请] 今天维护系统维护 祝所有人 高中 +8 gjjjzhong 2026-08-18 9/450 2026-08-18 13:01 by 家与远方
信息提示
请填处理意见