21.08.2017, 18:50 [+3 UTC]
в нашей команде: 2 096 чел. | участники онлайн: 4 (рекорд: 21)

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

:: консультации

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

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.41 (25.02.2017)

Общие новости:
23.02.2017, 09:51

Форум:
21.08.2017, 17:42

Последний вопрос:
21.08.2017, 14:51

Последний ответ:
17.08.2017, 18:54

Последняя рассылка:
21.08.2017, 15:45

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

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

Наша кнопка:

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

Отзывы о нас:
27.12.2010, 01:03 »
Дмитрий Олегович
И вновь качественный ответ! Большое спасибо! Очень рад что на форуме есть такие люди как вы! [вопрос № 181620, ответ № 265113]
22.09.2010, 13:32 »
Москвин Роман
Спасибо. Работает как надо. [вопрос № 179984, ответ № 263136]
07.11.2012, 15:10 »
Киреенко Андрей Иванович
Супер. огромное спасибо. [вопрос № 186784, ответ № 271675]

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

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

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

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

Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 340
mklokov
Статус: 6-й класс
Рейтинг: 87
solowey
Статус: 6-й класс
Рейтинг: 82

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

Консультация онлайн # 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 *.

Редактирование
--------

• Отредактировал: Вадим Исаев ака sir Henry (Старший модератор)
• Дата редактирования: 13.02.2017, 11:36

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

Ответ # 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() но что-то у меня не получилось ничего...

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

Коцюрбенко Алексей aka Жерар
Мастер-Эксперт

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);
}

• Отредактировал: Коцюрбенко Алексей aka Жерар (Мастер-Эксперт)
• Дата редактирования: 14.02.2017, 04:40

Коцюрбенко Алексей aka Жерар
Мастер-Эксперт

ID: 312929

# 4

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

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


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

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 5

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

Спасибо! А я пытался функции 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.14054 сек.

© 2001-2017, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.41 от 25.02.2017
Бесплатные консультации онлайн