source: project/release/5/string-utils/trunk/to-hex.scm @ 38937

Last change on this file since 38937 was 38937, checked in by Kon Lovett, 10 months ago

add -strict-types, type is interface

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