17.11.2019, 13:03 [+3 UTC]
в нашей команде: 3 977 чел. | участники онлайн: 8 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
16.11.2019, 20:23

Последний вопрос:
17.11.2019, 12:05
Всего: 150984

Последний ответ:
17.11.2019, 02:39
Всего: 259420

Последняя рассылка:
17.11.2019, 10:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
15.04.2010, 08:31 »
SLasH
Спасибо! Буду бороться) [вопрос № 177843, ответ № 260813]
18.06.2019, 13:16 »
dar777
Это самое лучшее решение! [вопрос № 195852, ответ № 278315]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 1366
Gluck
Статус: 7-й класс
Рейтинг: 873
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 565

Перейти к консультации №:
 

Консультация онлайн # 190557
Раздел: • С / С++
Автор вопроса: Вадим Исаев ака sir Henry (Мастер-Эксперт)
Отправлена: 13.02.2017, 11:35
Поступило ответов: 1

Здравствуйте! Прошу помощи в следующем вопросе:
Чистый Си (ни в коем случае не С++ smile ).
Есть массив байт, содержащий в каждой ячейке число от 0 до 255 (тип unsigned char). Например, m[0]=11, m[1]=155, m[2]=250 и т.д. Как мне этот массив конвертировать в единую строку. Если взять пример выше, то должно получиться "0B9BFA". Вывод не на экран, а в переменную типа char *.

Последнее редактирование 13.02.2017, 11:36 Вадим Исаев ака sir Henry (Мастер-Эксперт)

Состояние: Консультация закрыта

Ответ # 274654 от Лысков Игорь Витальевич (Старший модератор)

Здравствуйте, Вадим Исаев ака sir Henry!
В Си нет возможности вывести массив сразу, можно только по-элементно.
В мини-форуме было предложено несколько вариантов.
Наиболее подходящим оказался следующий (длина массива всегда одна и та же):

sprintf(s, "%02X%02X%02X", m[0], m[1], m[2]);


Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 17.02.2017, 11:28

5
нет комментария
-----
Дата оценки: 17.02.2017, 16:55

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 190557

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 1

= общий = | 13.02.2017, 13:46 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

Легко! Хотя бы так:

char hex(char c)
{
    c &= 0x0f;
    return (c<10)?c+'0':c-10+'A';
}

int main() 
{
    unsigned char m[3] = {11,155,250};
    char h[16];

    int i;

    for(i=0; i<3; i++)
    {
        h[i<<1] = hex(m[i]>>4);
        h[(i<<1)+1] = hex(m[i]);
    }
    h[i<<1] = 0;
}

-----
Последнее редактирование 13.02.2017, 14:10 Лысков Игорь Витальевич (Старший модератор)

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Вадим Исаев ака sir Henry
Мастер-Эксперт

ID: 425

# 2

= общий = | 14.02.2017, 04:05 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

Круто! Большое гран мерси! smile
Сейчас делаю программку, которая должна считывать RFID карточки и передавать их номер в браузер, чтобы наш библиотечный читатель сразу открывал свою страничку. Долго рылся во всяких стандартных библ функциях си с целью найти какую-нибудь готовую функцию. Пытался приспособить sprintf() но что-то у меня не получилось ничего...

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Коцюрбенко Алексей Владимирович
Модератор

ID: 312929

# 3

= общий = | 14.02.2017, 04:38 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

Ещё один вариант - использовать функцию sprintf для вывода данных в строку в нужном формате:

int main()
{
const int N = 3;
unsigned char m[N] = {11,155,250};
char s[2*N+1];
int i;
 for (i=0; i<N; i++) sprintf(s+2*i, "%02X", m[i]);
printf("%s", h);
}

-----
Последнее редактирование 14.02.2017, 04:40 Коцюрбенко Алексей Владимирович (Модератор)

Коцюрбенко Алексей Владимирович
Модератор

ID: 312929

# 4

= общий = | 14.02.2017, 04:49 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

© Цитата:
Долго рылся во всяких стандартных библ функциях си с целью найти какую-нибудь готовую функцию.


А в чистом си такой стандартной функции и нет - в отличие от того же PHP.

Вадим Исаев ака sir Henry
Мастер-Эксперт

ID: 425

# 5

= общий = | 14.02.2017, 05:05 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Коцюрбенко Алексей Владимирович:

Спасибо! А я пытался функции sprintf весь массив сразу скормить, но у меня ничего не вышло. smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 6

= общий = | 14.02.2017, 11:50 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

Это точно, все сразу никак smile Только побайтно. smile
Еще вариант, если длина массива всегда одна и та же:
sprintf(s, "%02X%02X%02X", m[0], m[1], m[2]);

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Вадим Исаев ака sir Henry
Мастер-Эксперт

ID: 425

# 7

 +1 
 
= общий = | 15.02.2017, 17:29 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

© Цитата: Лысков Игорь Витальевич
Еще вариант, если длина массива всегда одна и та же:
sprintf(s, "%02X%02X%02X", m[0], m[1], m[2]);

Да, спасибо. Я как раз так и сделал.

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.14415 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.77 от 31.05.2019
Версия JS: 1.34 | Версия CSS: 3.35