#define ALLOW_INSTRUCTOR_CODE /*************************************************************************** *************************************************************************** ****** BEFORE BEGINNING OR TURNING IN THIS EXERCISE IT IS EXTREMELY ****** ****** IMPORTANT THAT YOU READ, FULLY UNDERSTAND, AND ADHERE TO THE ****** ****** REQUIREMENTS STATED IN THE DOCUMENT TITLED, "ASSIGNMENT ****** ****** SUBMISSION REQUIREMENTS", DOWNLOADABLE FROM THE COURSE WEB ****** ****** SITE. ****** *************************************************************************** **************************************************************************/ /*************************************************************************** ************* C/C++ Programming 2: Assignment 7 - Exercise 3 ************* ********* BEGIN EXERCISE REQUIREMENT - THIS MUST BE A "C" PROGRAM ********* *************************************************************************** (2 points) Write function ReverseEndian: ReverseEndian syntax: void *ReverseEndian(void *p, size_t size); Parameters: p - a pointer to the scalar object to be reversed size - the number of bytes in the object Synopsis: Swaps the bytes in the scalar object in
, thereby converting it from big endian to little endian, or vice versa. Return:
*************************************************************************** ************************ END EXERCISE REQUIREMENT ************************* **************************************************************************/ /*************************************************************************** * BEFORE PRINTING THIS ASSIGNMENT TO TURN IN, DELETE THIS COMMENT AND * EVERYTHING ABOVE IT. **************************************************************************/ /* * TODO: * REPLACE THIS COMMENT WITH YOUR TITLE BLOCK. */ /* * TODO: * REPLACE THIS COMMENT WITH YOUR C CODE, PLUS ANYTHING NECESSARY TO * SUPPORT MY TEST CODE BELOW. DO NOT INCLUDE ANY UNNEEDED HEADER FILES! */ /*************************************************************************** * BEFORE PRINTING THIS ASSIGNMENT TO TURN IN, DELETE THIS COMMENT AND * EVERYTHING BELOW IT. **************************************************************************/ /* ***** Change nothing below this comment without instructor permission. **** * Everything that follows was written to help test/verify your code. You * do not need to understand the details of my code to write yours! */ #ifdef ALLOW_INSTRUCTOR_CODE #define TestIt(a, b) TestReverse((void *)&(a),\ ReverseEndian((void *)&(b), sizeof(b)), sizeof(b)) void TestReverse(const void *before, const void *after, size_t size); int main(void) { /* Some objects to test... */ char ch = 0x01, ch1 = ch; short sh = 0x0123, sh1 = sh; long lo = 0x01234567, lo1 = lo; float fl = 1234.567e27F, fl1 = fl; double db = 123456.567890, db1 = db; long double ld = 987654.321053e-204L, ld1 = ld; void *vp = (void *)0x0123, *vp1 = vp; char *cp = (char *)0x4567, *cp1 = cp; char *ip = (char *)0x89AB, *ip1 = ip; TestIt(ch1, ch); TestIt(sh1, sh); TestIt(lo1, lo); TestIt(fl1, fl); TestIt(db1, db); TestIt(ld1, ld); TestIt(vp1, vp); TestIt(cp1, cp); TestIt(ip1, ip); printf("ReverseEndian succeeded!\n"); return EXIT_SUCCESS; } void TestReverse(const void *before, const void *after, size_t size) { const char *cpBfore = (const char *)before; const char *cpAfter = (const char *)after; const char *tail; for (tail = cpBfore + (size - 1); size; --size) if (*tail-- != *cpAfter++) { fprintf(stderr, "ReverseEndian failed!\n"); exit(EXIT_FAILURE); } } #endif