С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
1

Забить char-строку 16-ричными числами из генератора случайных чисел

19.06.2012, 16:59. Показов 3789. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
чет не могу понять как?
есть буфер
C++
1
char                    packetbuff[24];
его нужно забить из генератора случайных чисел.
10ричными не вопрос

C++
1
2
3
4
5
6
7
8
9
char                    packetbuff[24];
int                 i=0, m=10;
srand ((unsigned)time(NULL));
for(i=0;i<24;i++) {                 
    // рандом чисел в интервале [0;m]
    a=rand()%(2*m+1)/2;
 
    packetbuff[i]=a;
}

как 16ричными заполнить?

Добавлено через 13 минут
я так понимаю тут нужно либо как-то особо создавать строку или при записи нужно перевод делать в 16ричное. или все сразу?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2012, 16:59
Ответы с готовыми решениями:

Заполнение матрицы целыми числами с помощью генератора случайных чисел
1.Матрицу 8*8 заполнить целыми числами с помощью генератора случайных чисел. 2.Найти определитель....

Заполнить файл целыми 30 числами, полученными с генератора случайных чисел
Заполнить файл целыми 20 числами, полученными с помощью генератора случайных чисел в интервале от 0...

Заполнить файл n натуральными числами с помощью генератора случайных чисел
Как-то даже неудобно спрашивать. Ребят, но если не трудно помогите пожалуйста. 1. Заполнить файл...

Забиваем строку 16-ричными числами и выводим на экран (генерируем МАС)
генерируется мак адрес и выводится на экран. но вот только как то не корректно он выводится ...

4
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
19.06.2012, 17:15 2
заполни массив обычными десятичными числами,а при выводе используй манипулятор потока hex
C++
1
cout << hex << packetbuff[i];
0
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
19.06.2012, 17:59  [ТС] 3
нет нет. мне именно ЗАПОЛНИТЬ нужно 16ричными

вывести на экран то я и сам могу. я пакет сетевой наполняю

очень по индусски но вот так делаю
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
srand ((unsigned)time(NULL));
    for(i=0;i<24;i++) {                         /// этот цикл забивает первые 12 байт. это MAC Dest & MAC Source
        // рандом чисео в интервале [0;m]
        a=rand()%(2*m+1)/2;
        
        if(a==0)
            packetbuff[i]='0';
        else
            // перевод в 16 а
            if(a>10) {
                packetbuff[i]='A';
                if(a>11) {
                    packetbuff[i]='B';
                    if(a>12) {
                        packetbuff[i]='C';
                        if(a>13) {
                            packetbuff[i]='D';
                            if(a>14) {
                                packetbuff[i]='E';
                                if(a>15) {
                                    packetbuff[i]='F';
                                }
                            }
                        }
                    }
                }
            }
            else
                packetbuff[i]=(char)a;
Добавлено через 11 минут
ой. вот так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
srand ((unsigned)time(NULL));
    for(i=0;i<24;i++) {                         /// этот цикл забивает первые 12 байт. это MAC Dest & MAC Source
        // рандом чисео в интервале [0;m]
        a=rand()%(2*m+1)/2;
        
        if(a==0)
            packetbuff[i]='0';
        else
            // перевод в 16 а
            if(a>9) {
                packetbuff[i]='A';
                if(a>10) {
                    packetbuff[i]='B';
                    if(a>11) {
                        packetbuff[i]='C';
                        if(a>12) {
                            packetbuff[i]='D';
                            if(a>13) {
                                packetbuff[i]='E';
                                if(a>14) {
                                    packetbuff[i]='F';
                                }
                            }
                        }
                    }
                }
            }
            else
                packetbuff[i]=(char)a;
0
Эксперт С++
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
19.06.2012, 18:06 4
В общем-то какая-то каша пока. Но если надо заполнить строку символами шестнадцатиричных чисел, то это как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int main()
{
    int const N = 24;
    char const* digits = "0123456789ABCDEF";
    char hexstring[N+1];
 
    srand(time(NULL));
 
    for (int i = 0; i < N; ++i)
        hexstring[i] = digits[random() & 15];
    hexstring[N] = '\0';
    
    std::cout << "random hex string: " << hexstring << std::endl;
 
    return 0;
}
онлайн результат:
http://liveworkspace.org/code/... 1873afbb14

Только при чём здесь сетевой пакет... Ну да ладно.
0
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
19.06.2012, 18:16 5
Можно воспользоваться ostringstream:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cassert>
 
 
int main() {
   std::size_t const hexDigits = 16;
   std::size_t const bufferSize = 24;
   char buffer[bufferSize];
   std::ostringstream oss;
   
   std::srand(std::time(0));
   for (std::size_t i = 0; i != bufferSize; ++i) {
      oss << std::hex << std::rand() % hexDigits;
   }
   assert(oss.str().length() >= bufferSize);
   std::memcpy(buffer, oss.str().c_str(), bufferSize);
   
   for (std::size_t i = 0; i != bufferSize; ++i) {
      std::cout << buffer[i];
   }
   std::cout << std::endl;
}
http://liveworkspace.org/code/... 815f043e14

Добавлено через 6 минут
или имелось в виду что-то другое?
0
19.06.2012, 18:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.06.2012, 18:16
Помогаю со студенческими работами здесь

Заполнить файл целыми 30 числами, полученными с генератора случайных чисел в интервале от -100 до 100
1.Заполнить файл целыми 30 числами, полученными с помощью генератора случайных чисел в интервале от...

Заполнить файл f натуральныи числами,полученными с помощю генератора случайных чисел
Заполнить файл f натуральныи числами,полученными с помощю генератора случайных чисел.Найти...

Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел.
Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел. Из файла f...

Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел
Помогите пожалуйста с задачей не понимаю как решать ее дальше?? Заполнить файл f целыми числами,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru