Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void f27(char c[], char cc[]) {//c - исходная строка; сс - новая
- int ii = 0; // индекс который идет по новой строке, просто i идет по исходной
- for (int i = 0; c[i] != 0; i++)//цикл по исходной строке
- {
- cc[ii] = c[i]; //в новую строку записываем символы из старой
- if (c[i] >= 'A' && c[i] <= 'Z') //если заглавная
- {
- char b[] = "0123456789ABCDEF"; //так как в 16сс после девтяки идут буквы, а при переводе из 10сс в 16сс мы получаем числа,
- //нужно их как-то заменить, для этого данный массив(пример: если у нас получилось 12, то в строку мы записываем b[12] = С)
- int digit = c[i]; //запоминаем код заглавной буквы
- int x2;
- char z[8] = ""; //массив для хранения 16ричной записи кода заглавной буквы
- cc[ii] = '0'; cc[ii+ 1] = 'x'; //записываю в новую строку на место заглавной буквы "0x"
- ii += 2; //перемещаем индекс вправо на 2 символа так как ввели два символа "0x"
- //цикл перевода из 10сс в 16сс
- for (int j = 0; j < 2; j++)
- {
- x2 = digit / 16;
- z[j] = digit - (x2 * 16) + '0';
- digit = x2;
- }
- int j;
- //цикл замены чисел больше 9 на буквы из 16сс
- for (j = 0; z[j] != 0; j++)
- {
- z[j] = b[z[j] - '0'];
- }
- //переворачиваю строку по правилу перевода из 10сс в 16сс, сразу же записывая в новую строку(k идет с конца числа к началу, ii идет по новой строке)
- for (int k = j-1; k >= 0; k--)
- {
- cc[ii] = z[k];
- ii++;
- }
- ii--;//так как перед выходом из предыдущего цикла мы увеличили ii, нужно его уменьшить, чтобы не пропустить символ
- }
- ii++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement