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

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

fix C macro call

File size: 2.2 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    unsigned char in0 = tolower(in[0]);
45    unsigned char in1 = tolower(in[1]);
46    *out++ = (hex_nibble(in0) << 4) | hex_nibble(tolower(in1));
47    in += 2;
48  }
49
50# undef hex_nibble
51}
52<#
53
54;;
55
56(define C_str_to_hex
57  (foreign-lambda void "bv_to_hex" nonnull-scheme-pointer nonnull-scheme-pointer int int))
58
59(define C_blob_to_hex
60  (foreign-lambda void "bv_to_hex" nonnull-scheme-pointer nonnull-blob int int))
61
62(define C_u8vec_to_hex
63  (foreign-lambda void "bv_to_hex" nonnull-scheme-pointer nonnull-u8vector int int))
64
65(define C_s8vec_to_hex
66  (foreign-lambda*
67      void
68      ((nonnull-scheme-pointer out) (nonnull-s8vector in) (int off) (int len))
69    "bv_to_hex(out, (uint8_t *)in, off, len);"))
70
71(define C_mem_to_hex
72  (foreign-lambda void "bv_to_hex" nonnull-scheme-pointer nonnull-c-pointer int int))
73
74;;
75
76(define C_hex_to_str
77  (foreign-lambda void "hex_to_bv" nonnull-scheme-pointer nonnull-scheme-pointer int int))
78
79;;;
80
81;;
82
83(define (str_to_hex out in off len)
84  (C_str_to_hex out in off len)
85  out )
86
87(define (blob_to_hex out in off len)
88  (C_blob_to_hex out in off len)
89  out )
90
91(define (u8vec_to_hex out in off len)
92  (C_u8vec_to_hex out in off len)
93  out )
94
95(define (s8vec_to_hex out in off len)
96  (C_s8vec_to_hex out in off len)
97  out )
98
99(define (mem_to_hex out in off len)
100  (C_mem_to_hex out in off len)
101  out )
102
103;;
104
105(define (hex_to_str out in off len)
106  (C_hex_to_str out in off len)
107  out )
108
109(define (hex_to_blob out in off len)
110  (C_hex_to_str out in off len)
111  out )
112
113) ;module to-hex
Note: See TracBrowser for help on using the repository browser.