memcpy

Untitled

Jul 14th, 2012
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. void parser::disassemble (char *packet, const char *fmt, ...)
  2. {
  3.     char mode;
  4.     va_list vl;
  5.     va_start(vl, fmt);
  6.    
  7.     while (*fmt) {
  8.         mode = *fmt++;
  9.         if (mode == U8) {
  10.             uint8_t *val = va_arg(vl, uint8_t *);
  11.             *val = *packet++;
  12.         } else if (mode == S8) {
  13.             int8_t *val = va_arg(vl, int8_t *);
  14.             *val = *packet++;  
  15.         } else if (mode == BE16) {
  16.             int16_t *val = va_arg(vl, int16_t *);
  17.             memcpy(val, packet, sizeof(int16_t));
  18.             *val = htons(*val);
  19.             packet += sizeof(int16_t);
  20.         } else if (mode == STRING) {
  21.             uint8_t *val = va_arg(vl, uint8_t *);
  22.             int i;
  23.             for (i = 0; i < 64; i++) {
  24.                 if (*packet == '&')
  25.                     packet += 2;
  26.                 *val++ = *packet++;
  27.             } *(val - 1) = 0;
  28.         } else if (mode == WORD) {
  29.             uint8_t *val = va_arg(vl, uint8_t *);
  30.             int i;
  31.             for (i = 0; i < 64; i++) {
  32.                 if (*packet == ' ')
  33.                     break;
  34.                 *val++ = *packet++;
  35.             } *val = 0;
  36.         } else if (mode == ARRAY) {
  37.             uint8_t *val = va_arg(vl, uint8_t *);
  38.             memcpy(val, packet, 1024);
  39.             packet += 1024;
  40.         } else {
  41.             break;
  42.         }
  43.     }
  44.    
  45.     va_end(vl);
  46. }
Advertisement
Add Comment
Please, Sign In to add comment