把一个单精度浮点数保存到一个四个长度的字节类型数组中,用.NET实现如下:
        private void button1_Click(object sender, EventArgs e)
        {            //byte[] b = Encoding.ASCII.GetBytes("-1.23");
            //textBox1.Text = GetHexStr(b);
            string s = "";
            float value = -1.23F;
            byte[] bytes = System.BitConverter.GetBytes(value);
            foreach (byte bt in bytes)
            {
                s += " 0x" + GetHexStr(bt);
            }
            textBox1.Text = s;
           //return s;      
        }
        /// <summary>
        /// 将字节数组转换为16进制字符串
        /// </summary>
        /// <param name="b"></param>
        /// <returns></returns>
         
        public static string GetHexStr(byte data)
        {
            return data.ToString("X2");
        }
怎样用delphi实现?

解决方案 »

  1.   

    var
      f:single;
      b:array[0..3] of byte;begin
      f:=1.23;
      move(f,b,sizeof(f));
    end;
      

  2.   

    function ByteSwap(value:DWORD):DWORD; assembler;
    asm
      BSWAP eax
    end;var
      float_4: Single;
      dwTemp: LongWord;
      byte_4: array[0..3] of byte;
    begin
      float_4 := 100.99;
      dwTemp := ByteSwap(PLongWord(@float_4)^);
      move(dwTemp, byte_4, 4);
      ShowMessage(format('%02x %02x %02x %02x',[byte_4[0],byte_4[1],byte_4[2],byte_4[3]]));
    end;
      

  3.   

    晕倒,你把move的第1和2两个参数调换一下位置不就逆转了?
      

  4.   

    呵呵 其实倒过来写就OK了!
    var 
      f:single; 
      b:array[0..3] of byte; begin 
      f:=1.23; 
      move(f,b,sizeof(f)); 
      f := 0;
      move(b,f,sizeof(f)); //f又变成1.23了 
    end;总结一下:对于单精度,数组长度是4,双精度,长度为8。这和浮点类型数据的长度是对应的。
    以上代码的结果高低字节刚好反过来了,这大概和MOVE函数有关吧!
    这种做法在数据传输是很有用的,仅仅四个字节,但绝对没有损失任何精度。
    以下是另外一种做法:
    var         p : Pointer;
            S: String;
    beginf := -1.23;
    p := @f;s := IntToHex(PInteger(p)^, 4);
    end;结果被存放在一个字符串内,而且高低字节没有反。
      

  5.   

    这不是跟move函数有关,而是跟你机器(CPU的字节序有关)
      

  6.   

    单精度浮点就是占4个字节,内存里面分配了4个字节的空间.你拿个pbyte的指针一个个去指也能分别读出4个字节的内容.move只是一个内存复制的操作而已高低字节顺序和cpu有关,估计楼主那段c#的程序是用在ppc或者smartphone上的