Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
GBIT
12 / 12 / 1
Регистрация: 05.10.2011
Сообщений: 219
#1

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

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

чет не могу понять как?
есть буфер
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2012, 16:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Забить char-строку 16-ричными числами из генератора случайных чисел (C++):

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

Заполнить файл целыми 30 числами, полученными с генератора случайных чисел - C++
Заполнить файл целыми 20 числами, полученными с помощью генератора случайных чисел в интервале от 0 до 200. Вывести результат на экран. ...

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

Забиваем строку 16-ричными числами и выводим на экран (генерируем МАС) - C++
генерируется мак адрес и выводится на экран. но вот только как то не корректно он выводится #include &lt;time.h&gt; #include &lt;stdio.h&gt; ...

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

Записать в файл f N целых чисел, полученных с помощью генератора случайных чисел. - C++
Помогите пожалуйста с задачей. Записать в файл f N целых чисел, полученных с помощью генератора случайных чисел. Заполнить файл g...

4
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
19.06.2012, 17:15 #2
заполни массив обычными десятичными числами,а при выводе используй манипулятор потока hex
C++
1
cout << hex << packetbuff[i];
0
GBIT
12 / 12 / 1
Регистрация: 05.10.2011
Сообщений: 219
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
grizlik78
Эксперт С++
1970 / 1463 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
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/e41a678611cb64fe5c72d21873afbb14

Только при чём здесь сетевой пакет... Ну да ладно.
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
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/f97de633e897ab72ca8495815f043e14

Добавлено через 6 минут
или имелось в виду что-то другое?
0
19.06.2012, 18:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 18:16
Привет! Вот еще темы с ответами:

Написание генератора случайных чисел - C++
Здравствуйте! Помогите пожалуйста выполнить лабу. Суть состоит в том, чтобы написать генератор случайных чисел по равномерному, а...

В MVS использование генератора случайных чисел - C++
Задача такова - Даны n прямоугольников со сторонами, параллельными осям координат, заданных координатами своей левой нижней и правой...

Работа с 16-ричными числами - C++
Написать программу, которая вводит с клавиатуры натуральное число N, выполняет сдвиг N вправо на 3 разряда, сдвиг влево N на 2 разряда,...

Написание своего генератора случайных чисел с различными плотностями распределения - C++
Помогите найти статьи/книги, где рассматривается написание своего генератора случайных чисел с различными плотностями распределения...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.