Как выводить по 4 байта в строке unsigned char
Как выводить по 4 байта из строки unsigned char? Например, есть строка:
unsigned char[16] t = "valera123456789"
как мне из неё циклом вывести по четыре элемента? Я не могу воспользоваться substr так как это unsigned char.
Ответы (4 шт):
Автор решения: Danny
→ Ссылка
Вместо substr можно использовать memcpy:
unsigned char copy[5];
memcpy( copy, &t[10], 4 );
copy[4] = '\0';
Автор решения: V-Mor
→ Ссылка
Во-первых, объявление unsigned char[16] t = "valera123456789" некорректно.
Во-вторых, вот решение:
#include <iostream>
#include <string>
int main()
{
unsigned char t[16] = "valera123456789";
for (int i = 0; i < strlen((char*)t); i += 4)
{
char copy[5];
strncpy(copy, (char *) t + i, 4);
copy[4] = 0;
printf("%s\n", copy);
}
getchar();
return 0;
}
Это решение не адаптировано для различных размеров строк и выводимых подстрок. Надеюсь, разберётесь, в каких местах нужно заменить числовые константы на переменные, чтобы добавить универсальности. Ключевые моменты:
- Чтобы скопировать определённое кол-во символов из одной строки в другую, необходимо использовать
strncpy(указатель на строку-приёмник, указатель на строку источник, кол-во символов). При этом следует обратить внимание, что указатель может указывать не только на начало строки, но и на любой символ, начиная с которого необходимо производить копирование. В моём примере, чтобы скопировать символы, начиная, например, с 4-ого, я просто сдвигал указатель обычным сложением (t + i). - Также очень важно в конце копии поставить нуль-символ (
0или'\0'):copy[4] = 0;, т.к. в противном случае строка-копия будет некорректно распознана функцией вывода (появятся лишние символы в конце).
Автор решения: Harry
→ Ссылка
Да выводить по одному символу, а каждые 4 - перевод строки:
unsigned char t[] = "valera123456789";
for(int i = 0; t[i]; ++i)
{
putchar(t[i]);
if (i%4 == 3) putchar('\n');
}
Автор решения: αλεχολυτ
→ Ссылка
Можно использовать старый добрый printf с указанием размера строки.
#include <cstdio>
int main() {
unsigned char t[] = "valera123456789";
for(auto p = t; p < sizeof(t) + t; p += 4) {
std::printf("%.4s\n", p);
}
}