T
Tomás Ó hÉilidhe
Given a string in the computer's native character set such as:
"Hello"
, I want to convert it to an array of integers representing the ASCII
values of the characters. The reason I want to do this is that I'll be
passing the ASCII array to a cryptographic hash function. In order to
make my program fully portable so that it will run properly on
machines where the default character set isn't ASCII, I've created a
MakeASCII function.
Please my MakeASCII function! Rip it apart!
typedef char unsigned OctetStorage;
void MakeASCII(OctetStorage *pos,char const *pc)
{
for( ; ; ++pos,++pc)
{
switch (*pc)
{
case ' ': *pos = 0x20u; break;
case '!': *pos = 0x21u; break;
case '\"': *pos = 0x22u; break;
case '#': *pos = 0x23u; break;
case '$': *pos = 0x24u; break;
case '%': *pos = 0x25u; break;
case '&': *pos = 0x26u; break;
case '\'': *pos = 0x27u; break;
case '(': *pos = 0x28u; break;
case ')': *pos = 0x29u; break;
case '*': *pos = 0x2Au; break;
case '+': *pos = 0x2Bu; break;
case ',': *pos = 0x2Cu; break;
case '-': *pos = 0x2Du; break;
case '.': *pos = 0x2Eu; break;
case '/': *pos = 0x2Fu; break;
case '0': *pos = 0x30u; break;
case '1': *pos = 0x31u; break;
case '2': *pos = 0x32u; break;
case '3': *pos = 0x33u; break;
case '4': *pos = 0x34u; break;
case '5': *pos = 0x35u; break;
case '6': *pos = 0x36u; break;
case '7': *pos = 0x37u; break;
case '8': *pos = 0x38u; break;
case '9': *pos = 0x39u; break;
case ':': *pos = 0x3Au; break;
case ';': *pos = 0x3Bu; break;
case '<': *pos = 0x3Cu; break;
case '=': *pos = 0x3Du; break;
case '>': *pos = 0x3Eu; break;
case '?': *pos = 0x3Fu; break;
case '@': *pos = 0x40u; break;
case 'A': *pos = 0x41u; break;
case 'B': *pos = 0x42u; break;
case 'C': *pos = 0x43u; break;
case 'D': *pos = 0x44u; break;
case 'E': *pos = 0x45u; break;
case 'F': *pos = 0x46u; break;
case 'G': *pos = 0x47u; break;
case 'H': *pos = 0x48u; break;
case 'I': *pos = 0x49u; break;
case 'J': *pos = 0x4Au; break;
case 'K': *pos = 0x4Bu; break;
case 'L': *pos = 0x4Cu; break;
case 'M': *pos = 0x4Du; break;
case 'N': *pos = 0x4Eu; break;
case 'O': *pos = 0x4Fu; break;
case 'P': *pos = 0x50u; break;
case 'Q': *pos = 0x51u; break;
case 'R': *pos = 0x52u; break;
case 'S': *pos = 0x53u; break;
case 'T': *pos = 0x54u; break;
case 'U': *pos = 0x55u; break;
case 'V': *pos = 0x56u; break;
case 'W': *pos = 0x57u; break;
case 'X': *pos = 0x58u; break;
case 'Y': *pos = 0x59u; break;
case 'Z': *pos = 0x5Au; break;
case '[': *pos = 0x5Bu; break;
case '\\': *pos = 0x5Cu; break;
case ']': *pos = 0x5Du; break;
case '^': *pos = 0x5Eu; break;
case '_': *pos = 0x5Fu; break;
case '`': *pos = 0x60u; break;
case 'a': *pos = 0x61u; break;
case 'b': *pos = 0x62u; break;
case 'c': *pos = 0x63u; break;
case 'd': *pos = 0x64u; break;
case 'e': *pos = 0x65u; break;
case 'f': *pos = 0x66u; break;
case 'g': *pos = 0x67u; break;
case 'h': *pos = 0x68u; break;
case 'i': *pos = 0x69u; break;
case 'j': *pos = 0x6Au; break;
case 'k': *pos = 0x6Bu; break;
case 'l': *pos = 0x6Cu; break;
case 'm': *pos = 0x6Du; break;
case 'n': *pos = 0x6Eu; break;
case 'o': *pos = 0x6Fu; break;
case 'p': *pos = 0x70u; break;
case 'q': *pos = 0x71u; break;
case 'r': *pos = 0x72u; break;
case 's': *pos = 0x73u; break;
case 't': *pos = 0x74u; break;
case 'u': *pos = 0x75u; break;
case 'v': *pos = 0x76u; break;
case 'w': *pos = 0x77u; break;
case 'x': *pos = 0x78u; break;
case 'y': *pos = 0x79u; break;
case 'z': *pos = 0x7Au; break;
case '{': *pos = 0x7Bu; break;
case '|': *pos = 0x7Cu; break;
case '}': *pos = 0x7Du; break;
case '~': *pos = 0x7Eu; break;
case 0: *pos = 0; return;
default: *pos = *pc;
}
}
}
"Hello"
, I want to convert it to an array of integers representing the ASCII
values of the characters. The reason I want to do this is that I'll be
passing the ASCII array to a cryptographic hash function. In order to
make my program fully portable so that it will run properly on
machines where the default character set isn't ASCII, I've created a
MakeASCII function.
Please my MakeASCII function! Rip it apart!
typedef char unsigned OctetStorage;
void MakeASCII(OctetStorage *pos,char const *pc)
{
for( ; ; ++pos,++pc)
{
switch (*pc)
{
case ' ': *pos = 0x20u; break;
case '!': *pos = 0x21u; break;
case '\"': *pos = 0x22u; break;
case '#': *pos = 0x23u; break;
case '$': *pos = 0x24u; break;
case '%': *pos = 0x25u; break;
case '&': *pos = 0x26u; break;
case '\'': *pos = 0x27u; break;
case '(': *pos = 0x28u; break;
case ')': *pos = 0x29u; break;
case '*': *pos = 0x2Au; break;
case '+': *pos = 0x2Bu; break;
case ',': *pos = 0x2Cu; break;
case '-': *pos = 0x2Du; break;
case '.': *pos = 0x2Eu; break;
case '/': *pos = 0x2Fu; break;
case '0': *pos = 0x30u; break;
case '1': *pos = 0x31u; break;
case '2': *pos = 0x32u; break;
case '3': *pos = 0x33u; break;
case '4': *pos = 0x34u; break;
case '5': *pos = 0x35u; break;
case '6': *pos = 0x36u; break;
case '7': *pos = 0x37u; break;
case '8': *pos = 0x38u; break;
case '9': *pos = 0x39u; break;
case ':': *pos = 0x3Au; break;
case ';': *pos = 0x3Bu; break;
case '<': *pos = 0x3Cu; break;
case '=': *pos = 0x3Du; break;
case '>': *pos = 0x3Eu; break;
case '?': *pos = 0x3Fu; break;
case '@': *pos = 0x40u; break;
case 'A': *pos = 0x41u; break;
case 'B': *pos = 0x42u; break;
case 'C': *pos = 0x43u; break;
case 'D': *pos = 0x44u; break;
case 'E': *pos = 0x45u; break;
case 'F': *pos = 0x46u; break;
case 'G': *pos = 0x47u; break;
case 'H': *pos = 0x48u; break;
case 'I': *pos = 0x49u; break;
case 'J': *pos = 0x4Au; break;
case 'K': *pos = 0x4Bu; break;
case 'L': *pos = 0x4Cu; break;
case 'M': *pos = 0x4Du; break;
case 'N': *pos = 0x4Eu; break;
case 'O': *pos = 0x4Fu; break;
case 'P': *pos = 0x50u; break;
case 'Q': *pos = 0x51u; break;
case 'R': *pos = 0x52u; break;
case 'S': *pos = 0x53u; break;
case 'T': *pos = 0x54u; break;
case 'U': *pos = 0x55u; break;
case 'V': *pos = 0x56u; break;
case 'W': *pos = 0x57u; break;
case 'X': *pos = 0x58u; break;
case 'Y': *pos = 0x59u; break;
case 'Z': *pos = 0x5Au; break;
case '[': *pos = 0x5Bu; break;
case '\\': *pos = 0x5Cu; break;
case ']': *pos = 0x5Du; break;
case '^': *pos = 0x5Eu; break;
case '_': *pos = 0x5Fu; break;
case '`': *pos = 0x60u; break;
case 'a': *pos = 0x61u; break;
case 'b': *pos = 0x62u; break;
case 'c': *pos = 0x63u; break;
case 'd': *pos = 0x64u; break;
case 'e': *pos = 0x65u; break;
case 'f': *pos = 0x66u; break;
case 'g': *pos = 0x67u; break;
case 'h': *pos = 0x68u; break;
case 'i': *pos = 0x69u; break;
case 'j': *pos = 0x6Au; break;
case 'k': *pos = 0x6Bu; break;
case 'l': *pos = 0x6Cu; break;
case 'm': *pos = 0x6Du; break;
case 'n': *pos = 0x6Eu; break;
case 'o': *pos = 0x6Fu; break;
case 'p': *pos = 0x70u; break;
case 'q': *pos = 0x71u; break;
case 'r': *pos = 0x72u; break;
case 's': *pos = 0x73u; break;
case 't': *pos = 0x74u; break;
case 'u': *pos = 0x75u; break;
case 'v': *pos = 0x76u; break;
case 'w': *pos = 0x77u; break;
case 'x': *pos = 0x78u; break;
case 'y': *pos = 0x79u; break;
case 'z': *pos = 0x7Au; break;
case '{': *pos = 0x7Bu; break;
case '|': *pos = 0x7Cu; break;
case '}': *pos = 0x7Du; break;
case '~': *pos = 0x7Eu; break;
case 0: *pos = 0; return;
default: *pos = *pc;
}
}
}