Code:
#include <stdio.h>
#include <string.h> // strcpy, strtok
// argument 2 is an 2-dimensional array where the tokens are copied into
// Return-Value: number of tokens where found
int mixed(char *var, char *delimiter, char numbers[20][60])
{
printf ("the delimiter is: %s(space)\n", delimiter);
int retval = 0, i = 0;
char * d;
d = strtok (var, delimiter);
while (d != NULL)
{
strcpy(numbers[i], d);
//printf ("i: %2d String: %s\n", i, numbers[i]);
i++;
d = strtok (NULL, delimiter);
retval++;
}
return retval;
}
// copies byte start to end form string allchars to string result_string
void copychars(char allchars[], char result_string[], int start, int end)
{
int i, j = 0;
for (i = start; i <= end; i++)
{
result_string[j] = allchars[i];
result_string[j + 1] = '\0';
j++;
}
}
/* This function bintodec gets the decimal value of an 8 Byte long binary value
* The first loop is to get length of given string 'wort'
* ----------------------------------------------------------------------- */
void bintodec(unsigned int (*decval), char wort[])
{
unsigned int i, ende, dumsm, dumza = 0, testvalue = 1;
for (ende = 0; ende <= 8; ende++)
if (wort[ende] == '\0') break;
testvalue <<= (ende - 1); /* sets testvalue according to length of string */
for (i = 0; i <= (ende - 1); i++)
if ((wort[i] == 'I') || (wort[i] == '1'))
{
dumsm = testvalue >> i;
dumza += dumsm;
}
(*decval) = dumza;
}
int main(int argc, char **argv)
{
int rxlen = -1, i, j, k, start, end;
int number_of_tokens = 0;
char delimiter[] = " ";
char rxbuffer_all[220]="11110001010101010101010101010101010101010101000000 00000000001111111110000000000000011111111110000000 00001111111110000000000000001111111111110000000000 11111111110000000000000000000000000000000000000000 000001";
char parts[6][60] = {0};
//char bitvalue[12] = {0};
char bitsofchar[5][6][12] = {0};
unsigned int decvalues[5][6] = {0};
printf("given was this string:\n%s\n", rxbuffer_all);
rxlen = strlen(rxbuffer_all);
printf("Length of given string is: %d byte\n", rxlen);
number_of_tokens = mixed(rxbuffer_all, delimiter, parts);
printf ("\nNumber of tokens: %d\n-----tokens splited into characters-------\n", number_of_tokens);
for (i = 0; i < number_of_tokens; i++)
{
rxlen = strlen(parts[i]);
printf("token nr: %2d Token=%s length=%d\n", i, parts[i], rxlen);
}
// Now separate tokens into binary values shown as 8-char-string
// and put this binay values into int-values
for (k = 0; k < 5; k++)
{
printf("\nToken number %d\n", k);
for (i = 0, j = 0; i <= 48; i+= 8, j++)
{
start = i;
end = i + 7;
copychars(parts[k], bitsofchar[k][j], start, end);
if (strlen( bitsofchar[k][j]) == 0) break;
bintodec(&decvalues[k][j], bitsofchar[k][j]);
printf("j=%2d start=%2d end=%2d String=%s decimal value: %u\n", j, start, end, bitsofchar[k][j], decvalues[k][j]);
}
}
return 0;
}