16进制字符串转换为float值

pxboy 2007-09-02 12:24:34
有一个16进制字符串,请问如何转换为float类型的值?
如有:43B48000 41180000 48A74680 三个字符串
...全文
423 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yofoo 2007-09-02
DWORD a = ::strtoul(str,0,16);
float b = (float)a;
回复
bit1010 2007-09-02
上面的两个解法都没有考虑小数部分:

public static Float parseFloatHex(String hexString) {
// 如果解析出错,则抛出异常
String[] slit = hexString.split("[.]");
float f = 0;
if (slit.length > 2) {
throw new IllegalArgumentException("");
}
if (slit[0].length() > 0) { //如果含有整数部分
f += Integer.parseInt(slit[0], 16);
}
if(slit.length == 2) {
int div = 1;
for (int i = 0; i < slit[1].length(); i++) {
div *= 16;
}
f += Integer.parseInt(slit[1], 16) * 1.0 / div;

}
return f;
}
回复
pxboy 2007-09-02
zephyr_cc的正解,
其他的可能都没明白怎么回事,这是一个float的16进制存储的问题
回复
zephyr_cc 2007-09-02
搞定了~
public static void toFloat(String s) {
int intBits = Integer.parseInt(s, 16);
float f = Float.intBitsToFloat(intBits);
System.out.println(f);
}

double的:
public static void toDouble(String s) {
long longBits = Long.parseLong(s, 16);
double d = Double.longBitsToDouble(longBits);
System.out.println(d);
}
回复
CharlesPrince 2007-09-02
int StrLen = YourStr.length;
Char SubChar;
int Rst=0;
for (int i=0;i<StrLen;i++)
{
SubChar=YourStr.subString(i);
if (SubChar>='0' && SubChar<='9')
{
Rst+=(SubChar-48)*(i*16);
}
else if(SubChar>='A' && SubChar<='F')
{
Rst+=(SubChar-55)*(i*16);
}
else if(SubChar>='a' && SubChar<='f')
{
Rst+=(SubChar-87)*(i*16);
}
else
{
Rst=0; //如查非法字符
break;
}
}
return Rst; //没有测过,由ASCII码算的,不对的话,自己改改。
回复
发动态
发帖子
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
社区公告
暂无公告