• C

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

LVL 1
naseeamAsked:
Who is Participating?
 
ozoConnect With a Mentor Commented:
#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
 
Jaime OlivaresSoftware ArchitectCommented:
You just need to use as:
   endian_put_native_to_little_u32(pgn, data);
0
 
Jaime OlivaresSoftware ArchitectCommented:
does it work?
0
Improve Your Query Performance Tuning

In this FREE six-day email course, you'll learn from Janis Griffin, Database Performance Evangelist. She'll teach 12 steps that you can use to optimize your queries as much as possible and see measurable results in your work. Get started today!

 
fridomCEO/ProgrammerCommented:
Maybe you are looking for htonl or ntohl ?

Regards
Friedrich
0
 
Infinity08Connect With a Mentor Commented:
>> "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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.