Advertisement
Guest User

fuckyou2

a guest
Nov 26th, 2014
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.47 KB | None | 0 0
  1. /**
  2.  * @file   aufgabe1-bit.c
  3.  * @brief  Aufgabe1 - Bit Manipulationen
  4.  */
  5.  
  6. #include <stdio.h>
  7. // Falls notwendig erweitern Sie die Liste der includes
  8.  
  9.  
  10. /**
  11.  @brief Aufgabe1a: Vertauschen von Bytes
  12.  @param [in] short int i
  13.  @return short int
  14.  
  15.  Schreiben Sie eine Funktion die das Low Byte (Bits 0-7) und
  16.  das High Byte (Bits 8-15) vertauscht.
  17.  Z.B. aus der Zahl 0x4020 wird die Zahl 0x2040.
  18.  */
  19.  
  20. unsigned short int switchLowHighByte(short int i) {
  21.     unsigned short int lowByte = i & 0x00FF;
  22.     unsigned short int highByte = i & 0xFF00;
  23.    
  24.     highByte = highByte >> 8;
  25.     lowByte = lowByte << 8;
  26.    
  27.     return (unsigned short int)lowByte + (unsigned short int)highByte;
  28.    
  29. }
  30.  
  31.  
  32. typedef enum {
  33.     Stop = 0,
  34.     Start = 1,
  35.     Finish = 5,
  36.     Fail = 255
  37. } Status;
  38.  
  39.  
  40. typedef enum {
  41.     One = 1,
  42.     Fifteen = 15,
  43.     Sixteen = 16,
  44.     Last = 255
  45. } Numbers;
  46.  
  47. /**
  48.  @brief Aufgabe1b: Serialisierung von Datenstrukturen
  49.  @param [in] Status s
  50.  @param [in] Numbers n
  51.  @param [out] short int* data
  52.  
  53.  Gegeben sind zwei enums. Ihre Aufgabe ist es jeweils Werte der
  54.  beiden enums in ein Datenpacket der Groesse 16Bit zu packen (serialisieren).
  55.  Werte des enums Status sollen dabei in das Low Byte und Werte
  56.  des enums Numbers sollen in das High Byte gepackt werden.
  57.  */
  58.  
  59.  
  60. void serialize(Status s, Numbers n, short int* data) {
  61.     *data = ((unsigned short int)n<<8)+(unsigned short int)s;
  62. }
  63.  
  64. /**
  65.  @brief Aufgabe1c: Deserialisierung von Datenstrukturen
  66.  @param [in] short int data
  67.  @param [out] Status* s
  68.  @param [out] Numbers* n
  69.  
  70.  Schreiben Sie eine Funktion die Werte der enums Status und Number
  71.  aus einem 16Bit Wert entpackt (deserialisiert).
  72.  Wir nehmen an, dass die enum Werte mittels der serialize Funktion
  73.  verpackt wurden.
  74.  */
  75.  
  76. void deserialize(short int data, Status* s, Numbers* n) {
  77.     *s = (Status)(data & 0x00FF);
  78.     *n = (Numbers)((data & 0xFF00) >> 8);
  79. }
  80.  
  81. /*
  82.  Testfunktionen
  83.  */
  84. enum TestEnum {
  85.     OK = 255,
  86.     FAIL = 0
  87. };
  88. typedef enum TestEnum Test;
  89.  
  90. Test testLowHigh() {
  91.     Test t = FAIL;
  92.     unsigned short int tests[] = {0x0000, 0xff00, 0x2040, 0x4020};
  93.     unsigned short int expectations[] = {0x0000, 0x00ff, 0x4020, 0x2040};
  94.     for(int i = 0; i < 4; i++){
  95.         if((switchLowHighByte(tests[i]) == expectations[i]))
  96.             t = OK;
  97.         else
  98.             t = FAIL;
  99.         }
  100.     return t;
  101. }
  102.  
  103. Test testSerialize(Status s, Numbers n, short int* data, short int expected){
  104.     Test t = FAIL;
  105.     serialize(s, n, data);
  106.    
  107.     unsigned short int[5] sTests = {0x0000, 0x0001, 0x0005, 0x00ff};
  108.     unsigned short int[5] nTests = {0x0001, 0x0005, 0x0010, 0x0};
  109.    
  110.     for(int i = 0; i < 4; i++){
  111.         if (*data == expected) {
  112.             t = OK;
  113.         }else{
  114.             t = FAIL;
  115.         }
  116.     }
  117.     return t;
  118. }
  119.  
  120. Test testDeserialize(short int data, Status* s, Numbers* n,Status newS, Numbers newN){
  121.     Test t;
  122.     deserialize(data, s, n);
  123.     if (*s == newS && *n == newN) {
  124.         t = OK;
  125.     }else{
  126.         t = FAIL;
  127.     }
  128.     return t;
  129. }
  130.  
  131. int main() {
  132.     // Test Aufgabe A
  133.     if(testLowHighByte() == OK){
  134.         printf("Alle Tests OK !");
  135.     } else {
  136.         printf("FAIL");
  137.     }
  138.    
  139.     // Test Aufgabe B
  140.     short int dataTestB = 0;
  141.     printf("%x \n", testSerialize(0, 1, &dataTestB, 0x0100));
  142.    
  143.     // Test Aufgabe C
  144.     short int dataTestC = 0x0100;
  145.     Status s;
  146.     Numbers n;
  147.     printf("%x \n", testDeserialize(dataTestC, &s, &n, 0x00, 0x01));
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement