source: trunk/IPs/systemC/Environment/Endianness/src/Endianness_swapBytes.cpp @ 144

Last change on this file since 144 was 144, checked in by rosiere, 14 years ago

1) compatible gcc 4.4.3
2) Translation file in MORPHEO_PREFIX directory

  • Property svn:keywords set to Id
File size: 1.9 KB
Line 
1#include "../include/Endianness.h"
2#include <iostream>
3#include <stdlib.h>
4#include <string.h>
5
6namespace environment {
7namespace endianness {
8
9/*
10 * swapBytes -> change the endiannes
11 * exemple for 16 and size_access = 4, [0123456789abcdef] -> [32107654ba98fedc]
12 */
13  char * swapBytes (char * string_src , uint32_t size_string, uint32_t size_access)
14  {
15    char string_tmp [size_string];
16   
17    if ( (size_access == 1) or
18         (size_access >  size_string))
19      return string_src;
20   
21//     if (size_string % size_access != 0)
22//       {
23//      std::cerr << "<swapBytes> : Size of string must be a multiple of size_access." << std::endl;
24//      exit(1);
25//       }
26   
27    // size_access :
28    // 1 -> bytes
29    // 2 -> half
30    // 4 -> word
31    // 8 -> doubleword
32   
33    memcpy (string_tmp,string_src,size_string);
34   
35  // Loop to reorganize the string
36    for (uint32_t i = 0 ; i < size_string; i += size_access)
37      {
38        switch (size_access)
39          {
40          case 2  : 
41            {
42              string_src[i+0] = string_tmp[i+1];
43              string_src[i+1] = string_tmp[i+0];
44              break;
45            }
46          case 4  :
47            {
48              string_src[i+0] = string_tmp[i+3];
49              string_src[i+1] = string_tmp[i+2];
50              string_src[i+2] = string_tmp[i+1];
51              string_src[i+3] = string_tmp[i+0];
52              break;
53            }
54          case 8  :
55            {
56              string_src[i+0] = string_tmp[i+7];
57              string_src[i+1] = string_tmp[i+6];
58              string_src[i+2] = string_tmp[i+5];
59              string_src[i+3] = string_tmp[i+4];
60              string_src[i+4] = string_tmp[i+3];
61              string_src[i+5] = string_tmp[i+2];
62              string_src[i+6] = string_tmp[i+1];
63              string_src[i+7] = string_tmp[i+0];
64              break;
65            }
66          default : 
67            {
68              std::cerr << "<swapBytes> : Illegal size of access (size_access = " << size_access << ")" << std::endl;
69              exit(1);
70              break;
71            }
72          }//end switch(size_access)
73      }//end i
74   
75    return string_src;
76  }
77
78};
79};
Note: See TracBrowser for help on using the repository browser.