D. J. Bernstein

The byte library interface

Copying strings

     #include <byte.h>

     byte_copy(out,len,in);
     byte_copyr(out,len,in);
     byte_zero(out,len);

     char *out;
     char *in;
     unsigned int len;
byte_copy copies in[0] to out[0], in[1] to out[1], etc., and finally in[len-1] to out[len-1].

byte_copyr copies in[len-1] to out[len-1], in[len-2] to out[len-2], etc., and finally in[0] to out[0].

byte_zero sets out[0], out[1], ... out[len-1] to 0.

Comparing strings

     #include <byte.h>

     result = byte_equal(one,len,two);
     result = byte_diff(one,len,two);

     char *one;
     char *two;
     unsigned int len;
     int result;
byte_diff returns negative, 0, or positive, depending on whether the string one[0], one[1], ... one[len-1] is lexicographically smaller than, equal to, or greater than the string two[0], two[1], ... two[len-1].

byte_equal returns 1 if the strings are equal, 0 otherwise.

When the strings are different, byte_diff and byte_equal do not read bytes past the first difference.

Searching for bytes in strings

     #include <byte.h>

     result = byte_chr(one,len,c);
     result = byte_rchr(one,len,c);

     char *one;
     int c;
     unsigned int len;
     unsigned int result;
byte_chr returns the smallest integer i between 0 and len-1 inclusive such that one[i] equals (char) c. If no such integer exists, byte_chr returns len.

byte_rchr returns the largest integer i between 0 and len-1 inclusive such that one[i] equals (char) c. If no such integer exists, byte_rchr returns len.

byte_chr and byte_rchr may read all the bytes one[0], one[1], ... one[len-1], even if not all the bytes are relevant to the answer.