Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 Распечатать массив BYTE  [new]
YUBA
Member

Откуда:
Сообщений: 788
Имеем:
LPBYTE lpbBufData = NULL;
dwDataCnt = DdeGetData(hData, NULL, sizeof(DWORD), 0);
printf("dwDataCnt = %d", dwDataCnt);
lpbBufData = new BYTE[dwDataCnt];
dwRet = DdeGetData(hData, lpbBufData, dwDataCnt, 0);
printf((const char*)lpbBufData); //Печать данных
delete lpbBufData;

dwDataCnt = 4206 // размер данных
Ничего не печатает. Почему? И как распечатать?

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
23 май 20, 17:01    [22138205]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
mayton
Member

Откуда: loopback
Сообщений: 46496
Насколько я понимаю для протокола ты должен анализировать значение dwRet и принимать решение
на его основе дальше.
23 май 20, 17:13    [22138214]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
YUBA
Member

Откуда:
Сообщений: 788
mayton, dwRet = 4206, - копия с консоли. Все ОК.

Сообщение было отредактировано: 23 май 20, 17:14
23 май 20, 17:15    [22138217]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
Изопропил
Member

Откуда:
Сообщений: 31465
YUBA,

формат то укажи
23 май 20, 17:17    [22138218]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
YUBA
Member

Откуда:
Сообщений: 788
Изопропил, формат чего? Пусть хоть крокозяблы печатает, пока по фиг.
Но сделал. Не помогает.(

Сообщение было отредактировано: 23 май 20, 17:25
23 май 20, 17:19    [22138220]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
mayton
Member

Откуда: loopback
Сообщений: 46496
Функция пишет в байт-буфер.

DWORD DdeGetData(
  HDDEDATA hData,
  LPBYTE   pDst,
  DWORD    cbMax,
  DWORD    cbOff
);


И наверное этот буфер нельзя так грубо кидать в printf. Там могут быть и непечатные символы (коды от 1 до 31).
И может 0 сразу прилететь.
23 май 20, 17:22    [22138224]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
Изопропил
Member

Откуда:
Сообщений: 31465
YUBA,

в цикле распечатай в шестнаднатеричном виде
23 май 20, 17:25    [22138225]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
mayton
Member

Откуда: loopback
Сообщений: 46496
Вот как тут https://stackoverflow.com/questions/6357031/how-do-you-convert-a-byte-array-to-a-hexadecimal-string-in-c
23 май 20, 17:25    [22138226]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
YUBA
Member

Откуда:
Сообщений: 788
Изопропил
YUBA,

в цикле распечатай в шестнаднатеричном виде
Да, что-то выдает
0 0 4 0 29 0 a 0 2 0 8d 0 7 ca ee e4 20 50 55 54 15 d6 e5 ed e0 20 ef ee f1 eb 2e 20 f1 e4 e5 eb ea e8 20 50 55 54 e d2 e5 ee f0 2e 20 f6 e5
 ed e0 20 50 55 54 6 d1 f2 f0 e0 e9 ea f d2 e5 ee f0 2e 20 f6 e5 ed e0 20 43 41 4c 4c 16 d6 e5 ed e0 20 ef ee f1 eb 2e 20 f1 e4 e5 eb ea e8
 20 43 41 4c 4c d c2 ee eb e0 f2 e8 eb fc ed ee f1 f2 fc 8 ca ee e4 20 43 41 4c 4c 10 d6 e5 ed e0 20 e1 e0 e7 2e 20 e0 ea f2 e8 e2 e0 9 d2 fd
 f2 e0 20 43 41 4c 4c 2 0 c 0 b 52 49 30 37 30 30 30 30 42 52 30 1 0 20 0 0 0 0 0 0 0 49 40 0 0 0 0 0 0 4e 40 0 0 0 0 0 17 f1 40 0 0 0 0 40
 e4 e7 40 2 0 1 0 0 1 0 8 0 3d a d7 a3 70 8d 54 40 2 0 c 0 b 52 49 30 37 30 30 30 30 42 46 30 1 0 10 0 0 0 0 0 60 5 fd 40 a4 70 3d a d7 23
 22 c0 2 0 d 0 b 52 49 30 37 32 35 30 30 42 52 30 0 1 0 18 0 0 0 0 0 0 0 4e 40 0 0 0 0 40 b3 f1 40 0 0 0 0 c0 ab e6 40 2 0 1 0 0 1 0 8 0 f8 5
 и т.д.
Что, не знаю, но на всяк случай массив BYTE предварительно обнулил.

Сообщение было отредактировано: 23 май 20, 18:06
23 май 20, 18:05    [22138246]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
mayton
Member

Откуда: loopback
Сообщений: 46496
Ктож так печатает. Делай padding с нулями.

"%02hhX"
23 май 20, 18:23    [22138252]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
YUBA
Member

Откуда:
Сообщений: 788
mayton, пока не имеет значения. Главное, массив заполняется.
Теперь надо решать как его парсить.
23 май 20, 18:25    [22138254]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
Изопропил
Member

Откуда:
Сообщений: 31465
YUBA
Теперь надо решать как его парсить.

для этого неплохо бы знать, что ожидается в этом массиве
23 май 20, 19:03    [22138278]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
YUBA
Member

Откуда:
Сообщений: 788
Изопропил
для этого неплохо бы знать, что ожидается в этом массиве
Да, неплохо, но этого я еще не знаю. Много букв и цифр - это пока все что известно.)
С Excel эта зараза как-то сама разбирается, но это я еще не проходил.) Бум разбираться.

Сообщение было отредактировано: 23 май 20, 19:15
23 май 20, 19:09    [22138284]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
Dima T
Member

Откуда:
Сообщений: 14743
YUBA
printf((const char*)lpbBufData); //Печать данных

Тут ожидается строка с нуль терминатором. У тебя первый байт 0, на нем все и заканчивается.
23 май 20, 19:43    [22138294]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
mayton
Member

Откуда: loopback
Сообщений: 46496
Да уже разобрались.

Плохо что без контекста мы разбираемся в огрызке кода. В самом деле в буфере мог быть и текст.
Но автор мог-бы и заранее нам сказать about expectations.
23 май 20, 20:03    [22138306]     Ответить | Цитировать Сообщить модератору
 Re: Распечатать массив BYTE  [new]
YUBA
Member

Откуда:
Сообщений: 788
mayton
Да уже разобрались.
Разобрались. Замечательно. Excel тоже отлично разбирается и по ячейкам эту хрень раскладывает. Где-то должны быть строки форматирования. Из MS это непонятно.
ЗЫ я DDEML использую.

Сообщение было отредактировано: 23 май 20, 21:34
23 май 20, 21:27    [22138336]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить