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

Преобразование указателя в массив - C++

Восстановить пароль Регистрация
 
Abraziv__
-52 / 3 / 0
Регистрация: 05.02.2013
Сообщений: 347
05.09.2013, 16:19     Преобразование указателя в массив #1
Всем привет. Есть указатель с типом const u_char * , известно , что он указывает на N байт. Как преобразовать его в массив;

Пробовал вот так :
C++
1
2
3
const u_char * data; // будем считать что указатель уже задан
u_char * arr = new u_char[N];
arr = ( u_char * ) data;
Если делать так, то заместо данных белиберда какая та.

Вот сам код :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void dispatcher_handler(u_char *param,const struct pcap_pkthdr *header, const u_char *packet)
{
        
    const struct mac_da_sa_type * mac;
    mac = ( struct mac_da_sa_type *) packet;    
    data_packet = ( u_char * ) ( packet + 14 );
    u_char mac_ok[6] = {6,5,4,3,2,1};
    int packet_ok = 0;
    bool mac_good = true;
    for(int i = 0; i < 5 && mac_good; i++)
    {
        if(mac_ok[i] != mac->da_address[i] )
            mac_good = false;
    }
    
    if(mac_good)
    {       
    fwrite(data_packet,sizeof(u_char),sizeof(data_packet),file);            
    }
        
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
05.09.2013, 16:59     Преобразование указателя в массив #2
Цитата Сообщение от Abraziv__ Посмотреть сообщение
for(int i = 0; i < 5 && mac_good; i++)
В этой строчке массив будет на единицу меньше.
Надо i <= 5 или же i < 6
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
05.09.2013, 17:30     Преобразование указателя в массив #3
Цитата Сообщение от Abraziv__ Посмотреть сообщение
C++
1
data_packet = ( u_char * ) ( packet + 14 );
Тут всё правильно? При такой расстановке скобок это 14-й пакет, а не 14-й байт.
Abraziv__
-52 / 3 / 0
Регистрация: 05.02.2013
Сообщений: 347
05.09.2013, 17:45  [ТС]     Преобразование указателя в массив #4
Разобрался уже. Да с циклом затупил малясь. Вот решение :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void dispatcher_handler(u_char *param,const struct pcap_pkthdr *header, const u_char *packet)
{       
    u_char mac_ok[6] = {6,5,4,3,2,1};
    bool mac_good = true;
    for(int i = 0; i < 6 && mac_good; i++)
    {
        if(packet[i] != mac_ok[i] )
            mac_good = false;
    }
    
    if(mac_good)
    {       
        fwrite(packet + 14,sizeof(const u_char),header->caplen - 14,file);          
    }
            
}
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
05.09.2013, 17:50     Преобразование указателя в массив #5
Цитата Сообщение от Abraziv__ Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
    bool mac_good = true;
    for(int i = 0; i < 6 && mac_good; i++)
    {
        if(packet[i] != mac_ok[i] )
            mac_good = false;
    }
    
    if(mac_good)
C++
1
if (memcmp(packet, mac_ok, sizeof(mac_ok)) == 0)
?
Abraziv__
-52 / 3 / 0
Регистрация: 05.02.2013
Сообщений: 347
05.09.2013, 18:33  [ТС]     Преобразование указателя в массив #6
Так быстрее?

Добавлено через 13 минут
В общем спасибо огромное всем за помощь.
Yandex
Объявления
05.09.2013, 18:33     Преобразование указателя в массив
Ответ Создать тему
Опции темы

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