精华内容
下载资源
问答
  • 十六进制转double

    千次阅读 2018-07-11 14:56:29
    要明白如何将十六进制转换为float或double,需要了解浮点数的二进制存储和转换方式。float和double在存储方式上都遵从IEEE的规范,且float遵从IEEE R32.24,而double遵从R64.53。具体转换规则可以参考...

    要明白如何将十六进制转换为float或double,需要了解浮点数的二进制存储和转换方式。float和double在存储方式上都遵从IEEE的规范,且float遵从IEEE R32.24,而double遵从R64.53。具体转换规则可以参考http://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html

    按照转换规则,写出HexToFloat和HexToDouble代码如下(buf指向的Hex已经进行高低地址转换):

    //将字节中pos位置开始的len位的二进制数转换为整数
    unsigned int getbitu(const unsigned char *buff, int pos, int len)
    {
        unsigned int bits=0;
        int i;
        for (i=pos;i<pos+len;i++)
        {
            bits=(bits<<1)+((buff[i/8]>>(7-i%8))&1u);   //从高位到低位逐位计算
        }
        return bits;
    }
    
    float HexToFloat(const unsigned char *buf)
    {
        float value = 0.0;
        unsigned int i = 0;
        unsigned int num, temp;
        int num2;
        bool flags1 = true;
    
        num = getbitu(buf, i, 1); //标志位
        i = i + 1;
    //指数部分,float型数据其规定偏移量为127,阶码有正有负,对于8位二进制,则其表示范围为-128-127
        num2 = getbitu(buf, i, 8) - 127;
        i = i + 8;
    
        while(1)
        {
            if(flags1)
            {
                value += 1 * pow(2, num2);
                num2--;
                flags1 = false;
            }
            temp = getbitu(buf, i, 1);
            i += 1;
            value += temp * pow(2, num2);
            num2--;
    
            if(i == 32)
                break;
        }
    
        if(num == 1)
            value *= -1;
    
        return value;
    }
    
    double HexToDouble(const unsigned char* buf)
    {
        double value = 0;
        unsigned int i = 0;
        unsigned int num,temp;
        int num2;
        bool flags1 = true;
    
        num = getbitu(buf,i,1); //标志位               
        i += 1;
    //double型规定偏移量为1023,其表示范围为-1024-1023
        num2 = getbitu(buf,i,11) - 1023;        
        i += 11;    
    
        while(1)
        {
            if(flags1)
            {
                flags1 = false;
                value += 1 * pow(2,num2); num2--;
            }
            temp = getbitu(buf,i,1);    i += 1;
            value += temp * pow(2,num2); num2--;
            if(i == 64)
                break;
        }
        if(num == 1)
            value *= -1;
    
        return value;
    }
    
    
    
    
    展开全文
  • how do you set specific bits for a double?For an int I'd do something like this:public static int Value { get { return 0xfff8; } }What should I do for double?public static double Value { get { return ...

    bd96500e110b49cbb3cd949968f18be7.png

    how do you set specific bits for a double?

    For an int I'd do something like this:

    public static int Value { get { return 0xfff8; } }

    What should I do for double?

    public static double Value { get { return 0xfff8; } }

    I'm a bit concerned that I may get an implicit conversion from an int representation of 0xfff8 to the double floating point representation. However, I really want that 0xfff8 bit pattern regardless of the type.

    解决方案

    Look at the BitConverter class or go unsafe.

    Unsafe example (untested):

    public unsafe double FromLong(long x)

    {

    return *((double*)&x);

    }

    BitConverter example:

    double d = BitConverter.Int64BitsToDouble(0xdeadbeef);

    展开全文
  • 十六进制转十进制,十进制转十六进制,十六进制转float,十六进制转double
  • /*** 数据类型转换工具类*@authorcyf**/public classNumConvertUtil{/*** bytes 16进制字符串*@parambArray*@return*/public static final String bytesToHexString(byte[] bArray) {StringBuffer sb= ...

    /*** 数据类型转换工具类

    *@authorcyf

    **/

    public classNumConvertUtil{/*** bytes 转16进制字符串

    *@parambArray

    *@return

    */

    public static final String bytesToHexString(byte[] bArray) {

    StringBuffer sb= newStringBuffer(bArray.length);

    String sTemp;for (int i = 0; i < bArray.length; i++) {

    sTemp= Integer.toHexString(0xFF &bArray[i]);if (sTemp.length() < 2)

    sb.append(0);

    sb.append(sTemp.toUpperCase());

    }returnsb.toString();

    }/*** 16进制字符串转bytes

    *@paramhex

    *@return

    */

    public static byte[] hexStringToByte(String hex) {int len = 0;int num=0;//判断字符串的长度是否是两位

    if(hex.length()>=2){//判断字符喜欢是否是偶数

    len=(hex.length() / 2);

    num= (hex.length() % 2);if (num == 1) {

    hex= "0" +hex;

    len=len+1;

    }

    }else{

    hex= "0" +hex;

    len=1;

    }byte[] result = new byte[len];char[] achar =hex.toCharArray();for (int i = 0; i < len; i++) {int pos = i * 2;

    result[i]= (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));

    }returnresult;

    }private static int toByte(charc) {if (c >= 'a')return (c - 'a' + 10) & 0x0f;if (c >= 'A')return (c - 'A' + 10) & 0x0f;return (c - '0') & 0x0f;

    }/*** 16进制字符串转十进制int

    *@paramHexString

    *@return

    */

    public static intHexStringToInt(String HexString) {int inJTFingerLockAddress = Integer.valueOf(HexString, 16);returninJTFingerLockAddress;

    }/*** 十进制int转16进制字符串

    *@paramHexString

    *@return

    */

    public static String IntToHexString(intnum) {

    String hexString=Integer.toHexString(num);returnhexString;

    }/*** 16进制String转BCD

    *@paramasc

    *@return

    */

    public static byte[] strToBcd(String asc) {int len =asc.length();int mod = len % 2;if (mod != 0) {

    asc= "0" +asc;

    len=asc.length();

    }byte abt[] = new byte[len];if (len >= 2) {

    len= len / 2;

    }byte bbt[] = new byte[len];

    abt=asc.getBytes();intj, k;for (int p = 0; p < asc.length()/2; p++) {if ( (abt[2 * p] >= '0') && (abt[2 * p] <= '9')) {

    j= abt[2 * p] - '0';

    }else if ( (abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) {

    j= abt[2 * p] - 'a' + 0x0a;

    }else{

    j= abt[2 * p] - 'A' + 0x0a;

    }if ( (abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) {

    k= abt[2 * p + 1] - '0';

    }else if ( (abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) {

    k= abt[2 * p + 1] - 'a' + 0x0a;

    }else{

    k= abt[2 * p + 1] - 'A' + 0x0a;

    }int a = (j << 4) +k;byte b = (byte) a;

    bbt[p]=b;

    }returnbbt;

    }/*** String 类型数字转化为Double 保留置顶小数位(用于显示金额等。)

    *@parammoney

    *@paramtype 保留小数点位数 #.00保留两位 #.0保留一位 #保留整数

    *@return

    */

    public staticString strToDouble(String money,String type){

    String toDouble= newDecimalFormat(type).format(Double.parseDouble(money));returntoDouble;

    }

    }

    展开全文
  • /*** 数据类型转换工具类*@authorcyf**/public classNumConvertUtil{/*** bytes 16进制字符串*@parambArray*@return*/public static final String bytesToHexString(byte[] bArray) {StringBuffer sb= ...

    /*** 数据类型转换工具类

    *@authorcyf

    **/

    public classNumConvertUtil{/*** bytes 转16进制字符串

    *@parambArray

    *@return

    */

    public static final String bytesToHexString(byte[] bArray) {

    StringBuffer sb= newStringBuffer(bArray.length);

    String sTemp;for (int i = 0; i < bArray.length; i++) {

    sTemp= Integer.toHexString(0xFF &bArray[i]);if (sTemp.length() < 2)

    sb.append(0);

    sb.append(sTemp.toUpperCase());

    }returnsb.toString();

    }/*** 16进制字符串转bytes

    *@paramhex

    *@return

    */

    public static byte[] hexStringToByte(String hex) {int len = 0;int num=0;//判断字符串的长度是否是两位

    if(hex.length()>=2){//判断字符喜欢是否是偶数

    len=(hex.length() / 2);

    num= (hex.length() % 2);if (num == 1) {

    hex= "0" +hex;

    len=len+1;

    }

    }else{

    hex= "0" +hex;

    len=1;

    }byte[] result = new byte[len];char[] achar =hex.toCharArray();for (int i = 0; i < len; i++) {int pos = i * 2;

    result[i]= (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));

    }returnresult;

    }private static int toByte(charc) {if (c >= 'a')return (c - 'a' + 10) & 0x0f;if (c >= 'A')return (c - 'A' + 10) & 0x0f;return (c - '0') & 0x0f;

    }/*** 16进制字符串转十进制int

    *@paramHexString

    *@return

    */

    public static intHexStringToInt(String HexString) {int inJTFingerLockAddress = Integer.valueOf(HexString, 16);returninJTFingerLockAddress;

    }/*** 十进制int转16进制字符串

    *@paramHexString

    *@return

    */

    public static String IntToHexString(intnum) {

    String hexString=Integer.toHexString(num);returnhexString;

    }/*** 16进制String转BCD

    *@paramasc

    *@return

    */

    public static byte[] strToBcd(String asc) {int len =asc.length();int mod = len % 2;if (mod != 0) {

    asc= "0" +asc;

    len=asc.length();

    }byte abt[] = new byte[len];if (len >= 2) {

    len= len / 2;

    }byte bbt[] = new byte[len];

    abt=asc.getBytes();intj, k;for (int p = 0; p < asc.length()/2; p++) {if ( (abt[2 * p] >= '0') && (abt[2 * p] <= '9')) {

    j= abt[2 * p] - '0';

    }else if ( (abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) {

    j= abt[2 * p] - 'a' + 0x0a;

    }else{

    j= abt[2 * p] - 'A' + 0x0a;

    }if ( (abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) {

    k= abt[2 * p + 1] - '0';

    }else if ( (abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) {

    k= abt[2 * p + 1] - 'a' + 0x0a;

    }else{

    k= abt[2 * p + 1] - 'A' + 0x0a;

    }int a = (j << 4) +k;byte b = (byte) a;

    bbt[p]=b;

    }returnbbt;

    }/*** String 类型数字转化为Double 保留置顶小数位(用于显示金额等。)

    *@parammoney

    *@paramtype 保留小数点位数 #.00保留两位 #.0保留一位 #保留整数

    *@return

    */

    public staticString strToDouble(String money,String type){

    String toDouble= newDecimalFormat(type).format(Double.parseDouble(money));returntoDouble;

    }

    }

    展开全文
  • /*** 十六进制转正负数*(2个字节的)*/public static double parseHex4(String num) {if (num.length() != 4) {throw new NumberFormatException(“Wrong length: ” + num.length() + “, must be 4.”);}int ret = ...
  •  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。 样例输入 FFFF 样例输出 65535 思路:首先Java虽然有...
  • 基础练习 十六进制转十进制 c语言

    千次阅读 2019-06-29 16:48:04
    基础练习 十六进制转十进制 问题描述  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。 样例输入 FFFF ...
  • 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。 样例输入 FFFF 样例输出 65535 代码 import java.util....
  •  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。 样例输入 FFFF 样例输出 65535 1. #include 2. #...
  • /** * 十六进制转正负数 *(2个字节的) */ public static double parseHex4(String num) { if (num.length() != 4) { throw new NumberFormatException("Wrong length: " + num.length(...
  • /** * 数据类型转换工具类 * @author cyf ... * bytes 16进制字符串 * @param bArray * @return */ public static final String bytesToHexString(byte[] bArray) { StringBuffer sb = new String...
  • Java 十六进制转十进制正负数

    千次阅读 2018-11-20 15:23:27
     * 十六进制转正负数  * (2个字节的)  */  public static double parseHex4(String num) {  if (num.length() != 4) {  throw new NumberFormatException("Wrong length: " + num.length(...
  • /** * 数据类型转换工具类 * @author cyf * */ public class NumConvertUtil{ ... * bytes 16进制字符串 * @param bArray * @return */ public static final String by...
  • 开始做进制转换的时候,将string 转换为double 再将double转换为 float,然后发现十六进制中的字母转换为double是不成功的,失败的,所以进行小小探索。  string hexString = "3d8f5c29";  uint num =...
  • 问题描述  从键盘输入一个不超过...如果将最后的结果使用整数类型保存,会出现在十六进制数较大时超出int范围的情况,故而将结果m定义为double类型,在输出时不输出小数点后内容即可 #include&amp;amp;lt;cstdi...
  • 考虑到举一反三,这里顺便上完整代码,顺便可以考虑实现R进制和十进制的转换. 完整代码: 1 #include <stdio.h> 2 #include <math.h> 3 4 double 5 hexToDecimal(int); 6 7 double 8 ...
  • #include #include #include int main(void) {  char a[9];  int i,len,z=0,k=0;  double s=0,x;  gets(a);  len = strlen(a);  for (i=len-1;i>=0;i--)
  • Public Function decToHex(ByVal decNumber As Double, ByVal reservedDigits As Integer) As String '将十进制转换为十六进制字符串,保留需要的位 Dim hexStr = Hex(decNumber) If hexStr.Length < ...
  • int转十六进制转String

    2013-04-12 13:41:09
    length() == 1)  {  hex = '0' + hex;  }  ret += hex.toUpperCase();... double d = Double.parseDouble(s);... double Double.valueof(String s).doublevalue()  二 stri
  • www.blogjava.net/freeman1984/archive/2010/02/02/311663.html
  • 今日,小弟我做题目遇到了Double型转换成十六进制的问题,到网上找了很多方法,结果都是手动的,最后,我一狠心,自己做了一个实验,代码如下:import java.io.*;public class HexChange{public static void main(String ...
  • delphi 十六进制转十进制

    千次阅读 2010-03-21 09:34:00
    //需引用Math单元,Decjg 需定义成全局变量function TFrm_Main.HextoDec(s:string):Double;var strlen:integer; Lstr,Rstr:string; partf:Extended;begin strlen:=Length(s) div 2; if Length(s)>0 then b
  • // 输入十进制整数,输出同样内存排布的float表示 inline float i2f(int i) { float f = 0; assert(sizeof(int) == sizeof(float)); memcpy(&f, &i, 4); return f; } inline double ll2d(long long
  • 因项目需要,需要将内存中的64位16进制字符串表示成double。如下:#include #include #include #include #include ...//十六进制转二进制串int stringToDouble(string temp);//二进制串到double(整数)--求阶码double...
  • C语言:十六进制(HEX)和浮点类型(float、double)转换

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 295
精华内容 118
关键字:

十六进制转double