Results 1 to 5 of 5
  1. #1
    tacaovo
    tacaovo is offline
    New member tacaovo's Avatar
    Join Date
    2011 Sep
    Posts
    8
    Thanks
    6
    Thanked 0 Times in 0 Posts
    Rep Power
    0

    Converting X,Y coords from a float into a DWORD?

    Hey guys, I have the following packet containing the X and Y coordinates of an entity:
    [66 96 5B 45] [9A D9 03 44]
    X ___________Y

    * they are in 32 bit float format

    I did the following (read the comments):
    Code:
    int main() 
    {
    	const BYTE pkt[]={0x66, 0x96, 0x5B, 0x45, 0x9A, 0xD9, 0x03, 0x44};
    
    	////// *** not works: return wrong values
    	DWORD px = *(DWORD*)&pkt[0];
    	DWORD py = *(DWORD*)&pkt[4];
    	float fx = (float)px;
    	float fy = (float)py;
    	//////
    
    	////// *** works: it returns the correct values
    	float fx = *(float*)&pkt[0];
    	float fy = *(float*)&pkt[4];
    	//////
    	
    	DWORD ix = (DWORD)fx;
    	DWORD iy = (DWORD)fy;
    
    return 0;	
    }
    Why one works and the other doesn't?

  2. #2
    Grooguz
    Grooguz is offline
    BanHammer Holder
    Grooguz's Avatar
    Join Date
    2010 May
    Posts
    678
    Thanks
    152
    Thanked 537 Times in 167 Posts
    Rep Power
    13
    In first case, you just cast integer value 1163630182 (px) to float... so
    Code:
    float fx = (float)px;
    will return exactly 1163630182 but as float type.

    this will return correct float values from your array
    Code:
    	DWORD px = *(DWORD*)&pkt[0];
    	DWORD py = *(DWORD*)&pkt[4];
    	float fx = *((float*)&px);
    	float fy = *((float*)&py);

  3. The Following User Says Thank You to Grooguz For This Useful Post:


  4. #3
    tacaovo
    tacaovo is offline
    New member tacaovo's Avatar
    Join Date
    2011 Sep
    Posts
    8
    Thanks
    6
    Thanked 0 Times in 0 Posts
    Rep Power
    0
    Ah ok, so I need to treat the DWORD variable as a pointer to a float number to be able to cast it to a float var.
    Thanks for clarifying!

  5. #4
    Grooguz
    Grooguz is offline
    BanHammer Holder
    Grooguz's Avatar
    Join Date
    2010 May
    Posts
    678
    Thanks
    152
    Thanked 537 Times in 167 Posts
    Rep Power
    13
    Another variant of conversion. We can use Unions to map the same memory (values) as multiple types.
    Code:
    	union F2D {
    	    DWORD dwVal;
    	    FLOAT fVal;
    	};
    	
    	F2D fThis;
    
    	const BYTE pkt[]={0x66, 0x96, 0x5B, 0x45, 0x9A, 0xD9, 0x03, 0x44};
    
    	////// *** #3 variant
    	fThis.dwVal = *(DWORD*)&pkt[0];
    	float fx = fThis.fVal;
    
    	fThis.dwVal = *(DWORD*)&pkt[4];
    	float fy = fThis.fVal;

  6. The Following User Says Thank You to Grooguz For This Useful Post:


  7. #5
    tacaovo
    tacaovo is offline
    New member tacaovo's Avatar
    Join Date
    2011 Sep
    Posts
    8
    Thanks
    6
    Thanked 0 Times in 0 Posts
    Rep Power
    0
    Excelent, using unions is a nicer way to play with the coordinates. Thanks very much for the idea!

    ---------- Post added 2011-12-08 at 05:35 AM ---------- Previous post was 2011-12-01 at 08:59 PM ----------

    Grooguz, I'm posting again here because I got other question about this subject. Please, check my simple example:

    Code:
    #include<stdio.h>
    typedef unsigned int DWORD;
     
    void dump(unsigned char* buf, int size)
    {
            for(int i=0;i<size;i++)
                    printf("%02X ", buf[i]);
            printf("\n");
    }
     
    int main()
    {
            unsigned char pkt[]={0x66, 0x96, 0x5B, 0x45};   //=3513
     
            DWORD dx = *(DWORD*)&pkt[0];
            float fx = *(float*)&dx;
            dump((unsigned char*)&fx,sizeof(fx));
     
    
            DWORD dx2 = 3513;
            float fx2 = *(float*)&dx2;
            dump((unsigned char*)&fx2,sizeof(fx2));
     
            return 0;
    }
    
    //    output:
    //      fx   = 66 96 5B 45 
    //      fx2 = A8 C3 FD BF
    As you can see I got another sequence of bytes different from the original input {0x66, 0x96, 0x5B, 0x45}. How to make it work properly?

Similar Threads

  1. I'm having trouble finding coords
    By Surubre in forum General Game Research
    Replies: 2
    Last Post: 2010-12-24, 01:45 AM
Visitors found this page by searching for:

c float to dword

dword to float c

cast float to dword

float dword c

dword float c

how to convert float to dword

c# convert int dword to float

float to dword

convert dword to float

convert float to dword c

dword to float

c# float Dword

c converting a dword to a float

float to dword c

c convert int to dword

convert int to dword

convertir float en dword

dword to float conversion c

c convert dword to float

how to convert a float to a dword

convert float to dword in c

c x y dword

c# convert position to dword

dword float

floattodword c

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •