Contiki-NG
Toggle main menu visibility
Loading...
Searching...
No Matches
hexconv.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2016, SICS, Swedish ICT AB.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. Neither the name of the Institute nor the names of its contributors
14
* may be used to endorse or promote products derived from this software
15
* without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*/
29
30
/**
31
* \file
32
* A small util to convert between bytes and hex string
33
* \author
34
* Niclas Finne <nfi@sics.se>
35
*/
36
37
#include "
lib/hexconv.h
"
38
#include "
sys/cc.h
"
39
#include <stdio.h>
40
/*---------------------------------------------------------------------------*/
41
static
inline
int
42
fromhex(
char
c)
43
{
44
if
(c >=
'0'
&& c <=
'9'
) {
45
return
c -
'0'
;
46
}
47
if
(c >=
'a'
&& c <=
'f'
) {
48
return
c -
'a'
+ 10;
49
}
50
if
(c >=
'A'
&& c <=
'F'
) {
51
return
c -
'A'
+ 10;
52
}
53
return
-1;
54
}
55
/*---------------------------------------------------------------------------*/
56
int
57
hexconv_hexlify(
const
uint8_t *data,
int
data_len,
char
*text,
int
text_size)
58
{
59
static
const
char
*HEX =
"0123456789abcdef"
;
60
int
i, p;
61
62
for
(i = 0, p = 0; p + 1 < text_size && i < data_len; i++) {
63
text[p++] = HEX[(data[i] >> 4) & 0xf];
64
text[p++] = HEX[data[i] & 0xf];
65
}
66
return
p;
67
}
68
/*---------------------------------------------------------------------------*/
69
int
70
hexconv_unhexlify(
const
char
*text,
int
text_len, uint8_t *buf,
int
buf_size)
71
{
72
int
i, p, c1, c2;
73
74
if
((text_len & 1) != 0) {
75
/* The string must be of an even length */
76
return
-1;
77
}
78
79
for
(i = 0, p = 0; p < buf_size && i + 1 < text_len; i += 2, p++) {
80
c1 = fromhex(text[i]);
81
c2 = fromhex(text[i + 1]);
82
if
(c1 < 0 || c2 < 0) {
83
return
-1;
84
}
85
buf[p] = ((c1 << 4) & 0xf0) + (c2 & 0xf);
86
}
87
return
p;
88
}
89
/*---------------------------------------------------------------------------*/
90
void
91
hexconv_print(
const
uint8_t *data,
int
data_len)
92
{
93
int
i;
94
for
(i = 0; i < data_len; i++) {
95
printf(
"%02x"
, data[i]);
96
}
97
}
98
/*---------------------------------------------------------------------------*/
cc.h
Default definitions of C compiler quirk work-arounds.
hexconv.h
A small util to convert between bytes and hex string.
os
lib
hexconv.c
Generated on
for Contiki-NG by
1.17.0