27.02.2017, 07:32 [+3 UTC]
в нашей команде: 1 817 чел. | участники онлайн: 4 (рекорд: 21)

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

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

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

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

:: правила

:: новости

:: участники

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

:: форум

:: блоги

:: поиск

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

:: наш журнал

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

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

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

:: поддержка

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

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

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

Форум:
25.02.2017, 16:25

Последний вопрос:
27.02.2017, 07:32

Последний ответ:
27.02.2017, 07:05

Последняя рассылка:
26.02.2017, 20:45

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

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

Наша кнопка:

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

Отзывы о нас:
18.02.2010, 13:38 »
Тимофеев Дмитрий Валерьевич
Спасибо за развёрнутый и подробный ответ. Так как цены на Radeon HD58хх кусаются наверно стоит подождать выхода новых видеокарт Nvidia или присмотреться сейчас к более доступным Radeon HD5770 , тогда поменяю и блок питания. [вопрос № 176749, ответ № 259546]
08.07.2010, 04:54 »
Kalina777
Спасибо за оперативный ответ! [вопрос № 179436, ответ № 262458]
04.10.2010, 13:51 »
Посетитель - 338444
Спасибо большое!!!Вы мне очень помогли) [вопрос № 180146, ответ № 263320]

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

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

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

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

Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 623
Асмик Гаряка
Статус: Советник
Рейтинг: 250
solowey
Статус: 5-й класс
Рейтинг: 221

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

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

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