source: project/release/4/string-utils/trunk/to-hex.scm @ 34441

Last change on this file since 34441 was 34441, checked in by Kon Lovett, 3 years ago

add hex->string

File size: 2.1 KB
Line 
1;;;; to-hex.scm  -*- Hen -*-
2;;;; Kon Lovett, Sep '10
3;;;; Kon Lovett, Sep '17
4
5(module to-hex
6
7(;export
8  mem_to_hex
9  s8vec_to_hex
10  u8vec_to_hex
11  blob_to_hex
12  str_to_hex
13  ;
14  hex_to_str
15  hex_to_blob)
16
17(import scheme)
18(import chicken foreign)
19
20;;;
21
22;;
23
24#>
25static void
26bv_to_hex( uint8_t *out, uint8_t *in, int off, int len )
27{
28  static char digits[] = "0123456789abcdef";
29  in += off;
30  while( len-- ) {
31    *out++ = digits[ *in >> 4 ];
32    *out++ = digits[ *in++ & 0x0f ];
33  }
34}
35
36static void
37hex_to_bv( uint8_t *out, uint8_t *in, int off, int len )
38{
39# define hex_nibble(c)  (isdigit(c) ? ((c) - '0') : (((c) - 'a') + 10))
40
41  static char digits[] = "0123456789abcdef";
42  in += off;
43  while( 0 <= (len -= 2) ) {
44    *out++ = (hex_nibble(tolower(in[0])) << 4) | hex_nibble(tolower(in[1]));
45    in += 2;
46  }
47
48# undef hex_nibble
49}
50<#
51
52;;
53
54(define C_str_to_hex
55  (foreign-lambda void "bv_to_hex" nonnull-scheme-pointer nonnull-scheme-pointer int int))
56
57(define C_blob_to_hex
58  (foreign-lambda void "bv_to_hex" nonnull-scheme-pointer nonnull-blob int int))
59
60(define C_u8vec_to_hex
61  (foreign-lambda void "bv_to_hex" nonnull-scheme-pointer nonnull-u8vector int int))
62
63(define C_s8vec_to_hex
64  (foreign-lambda*
65      void
66      ((nonnull-scheme-pointer out) (nonnull-s8vector in) (int off) (int len))
67    "bv_to_hex(out, (uint8_t *)in, off, len);"))
68
69(define C_mem_to_hex
70  (foreign-lambda void "bv_to_hex" nonnull-scheme-pointer nonnull-c-pointer int int))
71
72;;
73
74(define C_hex_to_str
75  (foreign-lambda void "hex_to_bv" nonnull-scheme-pointer nonnull-scheme-pointer int int))
76
77;;;
78
79;;
80
81(define (str_to_hex out in off len)
82  (C_str_to_hex out in off len)
83  out )
84
85(define (blob_to_hex out in off len)
86  (C_blob_to_hex out in off len)
87  out )
88
89(define (u8vec_to_hex out in off len)
90  (C_u8vec_to_hex out in off len)
91  out )
92
93(define (s8vec_to_hex out in off len)
94  (C_s8vec_to_hex out in off len)
95  out )
96
97(define (mem_to_hex out in off len)
98  (C_mem_to_hex out in off len)
99  out )
100
101;;
102
103(define (hex_to_str out in off len)
104  (C_hex_to_str out in off len)
105  out )
106
107(define (hex_to_blob out in off len)
108  (C_hex_to_str out in off len)
109  out )
110
111) ;module to-hex
Note: See TracBrowser for help on using the repository browser.