FrontISTR
5.7.0
Large-scale structural analysis program with finit element method
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
8
static
long
_TestEndian = 1;
9
10
int
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
18
void
*
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
}
hecmw_vis_endian.h
SwapEndian
void * SwapEndian(void *Addr, const int Nb)
Definition:
hecmw_vis_endian.c:18
IsLittleEndian
int IsLittleEndian(void)
Definition:
hecmw_vis_endian.c:10
hecmw1
src
visualizer
hecmw_vis_endian.c
Generated by
1.8.17