你的程序我帮你改完了,你看看吧.
完整的程序如下:(改动的地方见注释)
import java.util.Scannerpublic class HexToDecimal {
public static void main(String[]args){
Scanner input = new Scanner(System.in)
System.out.print("Enter a hex number: ")
String hex = input.next()
System.out.print("The decimal number for the hex is: "+ hexToDecimal(hex.toUpperCase()))
}
public 搏氏static int hexToDecimal(String hex){
int decimalValue = 0
for(int i = 0i<hex.length()i++){
if(hex.charAt(i)>渣银游'9'){//这里改一下 如销
if(hex.charAt(i)>'F' || hex.charAt(i)<65){//这里改一下
return 00000
}
else
decimalValue =decimalValue+(int) (Math.pow(16, hex.length()-1-i)*(hex.charAt(i)-55))
}else{
decimalValue =decimalValue+(int) (Math.pow(16, hex.length()-1-i)*(Integer.parseInt(hex.charAt(i)+"",10)))//这里改一下
}
}
return decimalValue
}
}
运行结果:
Enter a hex number: 2F
The decimal number for the hex is: 47
楼主你好.楼上的解决方式是很对的。
这个问题的解决需要这样的一个思想:将需要转换的数值的地址取出,赋值给一个“想要转换成的”数据类型的地址(也就是指针),然后取需要的内存单元中的内容就可以了
例如对一个赋了值的十六进制的变量n,需要转换成float型的,就是先取其地址&n,赋给一个float型的指针,也就是(float*)&n,然后取指针的内容*(float)&n就可以了。
需要注意的是,这个方法只适用于所需转换的数据在内存中所占大小与需要转换成的数据类型在内存中所占大小相同的情况(如VC6中,float型数据占4个字节,而每个字节是两位十六进制数,4个字节也就是八位十六进制数,正好等于你需要转换的十六进制数的位数,故此方法可行)
希望我的回答能帮到你~!
以下附上参考程序段:
#include <stdio.h>
float Hex_To_Decimal(unsigned char *Byte,int num)//十六进制到浮点数
{
// char cByte[4]//方法一
// for (int i=0i<numi++)
// {
// cByte[i] = Byte[i]
// }
//
// float pfValue=*(float*)&cByte
//return pfValue
return *((float*)Byte)//方法二
}
long FloatTohex(float HEX)//浮点数到十六进制转换1
{
return *( long *)&HEX
}
void FloatToByte(float floatNum,unsigned char* byteArry)////浮点数到十六进制转换2
{
char* pchar=(char*)&floatNum
for(int i=0i<sizeof(float)i++)
{
*byteArry=*pchar
pchar++
byteArry++
}
}
void main()
{
unsigned char floatToHex[4]
unsignedchar hexbyte[4]={0xd0,0x0f,0x49,0x40}//传输数据为3d cc cc cd,0xcd,0xCC,0xCC,0x3D,40490fd0
float Hdecimal=0.0
float flh=0.4
Hdecimal=Hex_To_Decimal(hexbyte,sizeof(hexbyte))//十六进制转换为浮点数
printf("\n 浮点数为:\n %f\n",Hdecimal)
long hX=FloatTohex(Hdecimal)//浮点数转换为十六进制一
printf("\n正序十六进制值:\n %f=%X \n",Hdecimal,hX)//正序显示
FloatToByte(Hdecimal,floatToHex)//浮点数转为十六进制二
printf("\n倒序十六进制:\n%f=%x %x %x %x\n",Hdecimal,floatToHex[0],floatToHex[1],floatToHex[2],floatToHex[3] )//倒序显示
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)