1 /* encode.c -- encoding and decoding of CoAP data types 2 * 3 * Copyright (C) 2010,2011 Olaf Bergmann <bergmann@tzi.org> 4 * 5 * This file is part of the CoAP library libcoap. Please see 6 * README for terms of use. 7 */ 8 9 #ifndef NDEBUG 10 # include <stdio.h> 11 #endif 12 13 #include "coap_config.h" 14 #include "encode.h" 15 16 /* Carsten suggested this when fls() is not available: */ coap_fls(unsigned int i)17int coap_fls(unsigned int i) { 18 int n; 19 for (n = 0; i; n++) 20 i >>= 1; 21 return n; 22 } 23 24 unsigned int coap_decode_var_bytes(unsigned char * buf,unsigned int len)25coap_decode_var_bytes(unsigned char *buf,unsigned int len) { 26 unsigned int i, n = 0; 27 for (i = 0; i < len; ++i) 28 n = (n << 8) + buf[i]; 29 30 return n; 31 } 32 33 unsigned int coap_encode_var_bytes(unsigned char * buf,unsigned int val)34coap_encode_var_bytes(unsigned char *buf, unsigned int val) { 35 unsigned int n, i; 36 37 for (n = 0, i = val; i && n < sizeof(val); ++n) 38 i >>= 8; 39 40 i = n; 41 while (i--) { 42 buf[i] = val & 0xff; 43 val >>= 8; 44 } 45 46 return n; 47 } 48 49