有c++代码如下:
        char rawbytes[] = { 0x3f, 0xd2, 0x59,0xb1 } ;
        int tmpInt ;
        float tmpFloat ;
        tmpInt = *( ( int * ) rawbytes ) ;怎样转为c#代码?

解决方案 »

  1.   


    {
        byte[] rawbytes= { 0x3f, 0xd2, 0x59, 0xb1 };
        int tmpInt = BitConverter.ToInt32(rawbytes, 0);
    }
      

  2.   

    非常感谢!还有一个问题:tmpFloat = *( ( float * )& tmpInt ) ;转为c#代码?
      

  3.   


    举一反三很有用对不对?
    float tmpFloat = BitConverter.ToSingle(rawbytes, 0);
      

  4.   

    再次感谢gomoku:
    完整的c++代码如下:
            char rawbytes[] = { 0x3e, 0xd2, 0x59,0xb1 } ;
            int tmpInt ;
            float tmpFloat ;
            tmpInt = *( ( int * ) rawbytes ) ;
            tmpInt = ntohl( tmpInt ) ;
            tmpFloat = *( ( float * )& tmpInt ) ;其中的ntohl()我想是一个转换方法.
    所有这些代码的含义是将以Float格式存放的4个字节的rawbytes[]表示成弧度数,
    或已知弧度,将它表示成四个字节的rawbytes[];
    比如上面的{ 0x3e, 0xd2, 0x59,0xb1 },它表示的弧度是:0.4108405411304,即N23度32分21.9秒
    请问如果用c#来写这个方法怎样写?分不够再加
      

  5.   

    tmpInt = IPAddress.NetworkToHostOrder(tmpInt );
      

  6.   

    上面是.net framwork的命名空间的方法,当然你也可以自己写:public static int NetworkToHostOrder(int h){
                return (h << 24) + ((h << 16) >> 8) + ((h << 8) >> 16) + (h >> 24);
            }
      

  7.   

    更正:
      char rawbytes[] = { 0x3e, 0xd2, 0x59,0xb1 } ; 
            int tmpInt ; 
            float tmpFloat ; 
            tmpInt = *( ( int * ) rawbytes ) ; 
            tmpInt = ntohl( tmpInt ) ; 
            tmpFloat = *( ( float * )& tmpInt ) ; 
    所有这些代码的含义是将以Float格式存放的4个字节的rawbytes[]表示成弧度数,
    比如上面的{ 0x3e, 0xd2, 0x59,0xb1 },经过上面的变化后,得到tmpFloat=0.4108405411304
    请问这个变换是怎样得来的?
      

  8.   

    更正:
      char rawbytes[] = { 0x3e, 0xd2, 0x59,0xb1 } ; 
            int tmpInt ; 
            float tmpFloat ; 
            tmpInt = *( ( int * ) rawbytes ) ; 
            tmpInt = ntohl( tmpInt ) ; 
            tmpFloat = *( ( float * )& tmpInt ) ; 
    所有这些代码的含义是将以Float格式存放的4个字节的rawbytes[]表示成弧度数,
    比如上面的{ 0x3e, 0xd2, 0x59,0xb1 },经过上面的变化后,得到tmpFloat=0.4108405411304
    请问这个变换是怎样得来的?
      

  9.   


        byte[] rawbytes = { 0x3e, 0xd2, 0x59,0xb1 } ;
        Array.Reverse(rawbytes);                                  //<---
        float tempFloat = BitConverter.ToSingle(rawbytes, 0);     //0.4108405411304