• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 344
  • Last Modified:

Macro to put data in Little Endian

My enivroment is Unix, C.  I get the following compile error on attached 'C' code.  Please advise.

"put_little_u32.c", line 8: error 4068: Missing comma seperator between par
ameters in macro "endian_put_native_to_little_u32".
#include <stdio.h>
 
/* This macro reverses data order so LSB is first. */
#define endian_put_native_to_little_u32(long src, char * dest) \
        dest[0] = (char)(src); \
	dest[1] = (char)(src >> 8); \
	dest[2] = (char)(src >> 16); \
	dest[3] = (char)(src >> 24);  /* line 8 */
 
 
main()     
{
   char data[4];  
   
   long pgn = 0x33221100;
   
   endian_put_native_to_little_u32(pgn, &data[0]);
   
   printf("data[0] = %d.\n", data[0]);
   printf("data[1] = %d.\n", data[1]);
   printf("data[2] = %d.\n", data[2]);
   printf("data[3] = %d.\n", data[3]);
}

Open in new window

0
naseeam
Asked:
naseeam
2 Solutions
 
Jaime OlivaresCommented:
You just need to use as:
   endian_put_native_to_little_u32(pgn, data);
0
 
Jaime OlivaresCommented:
does it work?
0
 
ozoCommented:
#include <stdio.h>

/* This macro reverses data order so LSB is first. */
#define endian_put_native_to_little_u32(src, dest) \
        (dest)[0] = (char)(src); \
        (dest)[1] = (char)((src) >> 8); \
        (dest)[2] = (char)((src) >> 16); \
        (dest)[3] = (char)((src) >> 24);  /* line 8 */


main()
{
   char data[4];

   long pgn = 0x33221100;

   endian_put_native_to_little_u32(pgn, &data[0]);

   printf("data[0] = %d.\n", data[0]);
   printf("data[1] = %d.\n", data[1]);
   printf("data[2] = %d.\n", data[2]);
   printf("data[3] = %d.\n", data[3]);
}
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
fridomCommented:
Maybe you are looking for htonl or ntohl ?

Regards
Friedrich
0
 
Infinity08Commented:
>> "put_little_u32.c", line 8: error 4068: Missing comma seperator between parameters in macro "endian_put_native_to_little_u32".

macro's do not take arguments like functions do ... Macro arguments are typeless, so you don't have to specify the types of the arguments. They just get treated as a string, and are literally replaced in the macro body.

See ozo's corrections.

Also, take a look at fridom's suggestion ! ;)
0
 
ozoCommented:
Also, if you pass &data[0] rather than data
&data[0][1] would be parsed as &(data[0][1])
and taking [0][1] of a char[4] makes no sense, so it has to be
(&data[0])[1]
0
 
naseeamAuthor Commented:
Expert Fixed my source code.  As a result my code compiled.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now