Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

Заполнить файл n натуральными числами с помощью генератора случайных чисел C++
Работа с 16-ричными числами C++
C++ С помощью генератора случайных чисел ,задать значения элементов массива
Написание генератора случайных чисел C++
C++ В MVS использование генератора случайных чисел
C++ Записать в файл f N целых чисел, полученных с помощью генератора случайных чисел.
C++ Заполнение матрицы целыми числами с помощью генератора случайных чисел
Забиваем строку 16-ричными числами и выводим на экран (генерируем МАС) C++
Сформировать матрицу с помощью генератора случайных чисел и организовать ее вывод C++
C++ Написание своего генератора случайных чисел с различными плотностями распределения
Заполнить файл целыми 30 числами, полученными с генератора случайных чисел C++
C++ Заполнить файл целыми 30 числами, полученными с генератора случайных чисел в интервале от -100 до 100

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
19.06.2012, 17:15     Забить char-строку 16-ричными числами из генератора случайных чисел #2
заполни массив обычными десятичными числами,а при выводе используй манипулятор потока hex
C++
1
cout << hex << packetbuff[i];
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
19.06.2012, 17:59  [ТС]     Забить char-строку 16-ричными числами из генератора случайных чисел #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;
grizlik78
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
19.06.2012, 18:06     Забить char-строку 16-ричными числами из генератора случайных чисел #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/e41a67...72d21873afbb14

Только при чём здесь сетевой пакет... Ну да ладно.
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
19.06.2012, 18:16     Забить char-строку 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/f97de6...8495815f043e14

Добавлено через 6 минут
или имелось в виду что-то другое?
Yandex
Объявления
19.06.2012, 18:16     Забить char-строку 16-ричными числами из генератора случайных чисел
Ответ Создать тему
Опции темы

Текущее время: 21:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru