У меня есть задание, и я понятия не имею, что я должен делать.Вот задача:
Напишите следующую функцию: char * encodingToShortString (char * dig_str);
Функция должна создать и вернуть новую строку short_dig_str .Каждый байт в short_dig_str будет состоять из двух соответствующих битовых квартетов для двух последовательных символов dig_str .Для dig_str с длиной n (ДЛИНА, а не размер) длина short_dig_str будет n / 2 для четного n и n / 2 + 1 для нечетного n.Для нечетного n первый квартет в short_dig_str не соответствует ни одной цифре dig_str , и все его биты являются нулями.
Пример: Для dig_str = "1234", строка short_dig_str будет состоять из следующего целого числа: 00010010 00110100
Для dig_str = "51234", строка short_dig_str будет состоять из следующего целого числа: 00000101 00010010 00110100
(слева направо, старшее значащее, MSB, к младшему значащему младшему биту).
Требуемое пространство памяти должно быть назначенов строку short_dig_str точно.Можно предположить, что памяти достаточно для выделения.
Я запустил такую функцию:
char* codingToShortString(char* dig_str)//let's imagine that dig_str[] = "12";
{
char *short_dig_str;
char temp;//0000 0000
int n = strlen(dig_str);
unsigned mask = 1<<3;//1111
unsigned c; //bit counter
if (n%2 == 0)
{
short_dig_str = malloc(((n/2)+1)*sizeof(char));
}
else
{
short_dig_str = malloc(((n/2)+2)*sizeof(char));
}
for (i=0; i<n; i++)
{
for (c=1; c<=4; c++)
{
temp = dig_str[i] & mask;
temp <<= 1;
}
}
}
Но потом я понятия не имею, что делать.Как положить двоичное значение в short_dig_str ?Я очень смущен.