02.06.2020, 01:39 [+3 UTC]
в нашей команде: 4 582 чел. | участники онлайн: 1 (рекорд: 21)

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

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

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.89 (25.04.2020)
JS-v.1.45 | CSS-v.3.39

Общие новости:
13.04.2020, 00:02

Форум:
31.05.2020, 09:51

Последний вопрос:
02.06.2020, 01:06
Всего: 152548

Последний ответ:
01.06.2020, 23:15
Всего: 260235

Последняя рассылка:
01.06.2020, 20:15

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

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

Наша кнопка:

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

Отзывы о нас:
18.01.2017, 21:58 »
svrvsvrv
Спасибо за доступное объяснение! [вопрос № 190434, ответ № 274554]
19.08.2019, 14:54 »
dar777
Это самое лучшее решение! [вопрос № 196123, ответ № 278538]

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

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

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

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

Коцюрбенко Алексей Владимирович
Статус: Старший модератор
Рейтинг: 1664
var
Статус: 7-й класс
Рейтинг: 864
solowey
Статус: Профессионал
Рейтинг: 463

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

Консультация онлайн # 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 (Мастер-Эксперт)

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

Здравствуйте, Вадим Исаев ака 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.15159 сек.

© 2001-2020, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.89 от 25.04.2020
Версия JS: 1.45 | Версия CSS: 3.39