FrontISTR 5.2.0
Large-scale structural analysis program with finit element method
Loading...
Searching...
No Matches
hecmw_vis_endian.c
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright (c) 2019 FrontISTR Commons
3 * This software is released under the MIT License, see LICENSE.txt
4 *****************************************************************************/
5
6#include "hecmw_vis_endian.h"
7
8static long _TestEndian = 1;
9
10int IsLittleEndian(void) { return *(char*)&_TestEndian; }
11
12/******************************************************************************
13 FUNCTION: SwapEndian
14 PURPOSE: Swap the byte order of a structure
15 EXAMPLE: float F=123.456;; SWAP_FLOAT(F);
16 ******************************************************************************/
17
18void* SwapEndian(void* Addr, const int Nb) {
19 static char Swapped[16];
20 switch (Nb) {
21 case 2:
22 Swapped[0] = *((char*)Addr + 1);
23 Swapped[1] = *((char*)Addr);
24 break;
25 case 3: /* As far as I know, 3 is used only with RGB images */
26 Swapped[0] = *((char*)Addr + 2);
27 Swapped[1] = *((char*)Addr + 1);
28 Swapped[2] = *((char*)Addr);
29 break;
30 case 4:
31 Swapped[0] = *((char*)Addr + 3);
32 Swapped[1] = *((char*)Addr + 2);
33 Swapped[2] = *((char*)Addr + 1);
34 Swapped[3] = *((char*)Addr);
35 break;
36 case 8:
37 Swapped[0] = *((char*)Addr + 7);
38 Swapped[1] = *((char*)Addr + 6);
39 Swapped[2] = *((char*)Addr + 5);
40 Swapped[3] = *((char*)Addr + 4);
41 Swapped[4] = *((char*)Addr + 3);
42 Swapped[5] = *((char*)Addr + 2);
43 Swapped[6] = *((char*)Addr + 1);
44 Swapped[7] = *((char*)Addr);
45 break;
46 case 16:
47 Swapped[0] = *((char*)Addr + 15);
48 Swapped[1] = *((char*)Addr + 14);
49 Swapped[2] = *((char*)Addr + 13);
50 Swapped[3] = *((char*)Addr + 12);
51 Swapped[4] = *((char*)Addr + 11);
52 Swapped[5] = *((char*)Addr + 10);
53 Swapped[6] = *((char*)Addr + 9);
54 Swapped[7] = *((char*)Addr + 8);
55 Swapped[8] = *((char*)Addr + 7);
56 Swapped[9] = *((char*)Addr + 6);
57 Swapped[10] = *((char*)Addr + 5);
58 Swapped[11] = *((char*)Addr + 4);
59 Swapped[12] = *((char*)Addr + 3);
60 Swapped[13] = *((char*)Addr + 2);
61 Swapped[14] = *((char*)Addr + 1);
62 Swapped[15] = *((char*)Addr);
63 break;
64 }
65 return (void*)Swapped;
66}
void * SwapEndian(void *Addr, const int Nb)
int IsLittleEndian(void)