
| Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
![]() |
||
Помогите перевести c Delphi на C++ фрагмент
|
||
| Философия, технологии, алгоритмы! |
![]() |
|
|
|
Опции темы |
|
|
#1 | ||
|
///
Сообщений: 9,552
Регистрация: 02.04.2005
Возраст: 45
|
Помогите перевести c Delphi на C++ фрагмент
На Delphi:
Цитата:
Цитата:
Спасибо. |
||
|
|
|
|
#3 |
|
///
Сообщений: 9,552
Регистрация: 02.04.2005
Возраст: 45
|
Не... поторопился я...
Вот эта конструкция (PAnsiChar(Data)[I]); дает мне символ с кодом, содержащимся в (Data)[I]. Кстати, почему (Data)[I], а не (Data[I]) ? А как мне получить непосредственно код, то есть число unsigned char ? |
|
|
|
|
#4 |
|
highly mean
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 36
|
|
|
|
|
|
#5 |
|
Registered User
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 58
|
-=Женек=-,
Может для начала заголовок нужно на этот поменять? void __fastcall HidDevCtlDeviceData(TJvHidDevice *WorkDev, BYTE ReportID, const *Data, WORD Size); И что у вас за тип Pointer? В билдере разве есть такой тип. На вашем месте, я бы посмотрел готовые исходники на билдере для компонента jvHidDevice, а потом переделал бы их под свою задачу
|
|
|
|
|
#6 | |||
|
///
Сообщений: 9,552
Регистрация: 02.04.2005
Возраст: 45
|
Hopkroft,
Цитата:
Цитата:
silly, Цитата:
|
|||
|
|
|
|
#7 | ||
|
Registered User
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 58
|
Цитата:
Цитата:
UPD. А что за девайс хоть? Дома смогу посмотреть результат для джойстика XBox. И чем Delphi не устраивает? Последний раз редактировалось Hopkroft; 29.04.2013 в 09:22. |
||
|
|
|
|
#8 | ||||||
|
///
Сообщений: 9,552
Регистрация: 02.04.2005
Возраст: 45
|
Цитата:
Цитата:
Цитата:
Я понимаю, что вы не телепат, но неужели непонятно, что если я пишу: Цитата:
У меня программа в микроконтроллере, вней что-то вроде: Цитата:
И если я записал в Buffer 0x30, то конструкция [Cardinal(PAnsiChar(Data)[I])] предстает на экране в виде строки "48", если использовать PAnsiChar(Data)[I], то это дает строку (символ) "0". А я хочу нечто вроде: Цитата:
|
||||||
|
|
|
|
#9 | |
|
Registered User
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 58
|
Цитата:
По идее вот так: unsigned char x; x=(unsigned char)(PAnsiChar(Data)[I]); x при печати выведет 0. Cardinal в Delphi это unsigned int в Buildere. |
|
|
|
|
|
#10 |
|
Форумец
Сообщений: 44,633
Регистрация: 27.05.2003
Возраст: 48
|
там глюка, кажись.
именно с этим типом - AnsiChar, в дельфе он равен char'у, а в Builder - Short'у. Т.е. два байта. Что делать - для начала вывести sizeof(AnsiChar) и посмотреть сколько выйдет. Если 2, то дело в этом. |
|
|
|
|
#11 | ||
|
///
Сообщений: 9,552
Регистрация: 02.04.2005
Возраст: 45
|
Hopkroft,
Спасибо, но вот только PAnsiChar как то режет глаз. Получилось вот так: Цитата:
Цитата:
|
||
|
|
|
|
#17 |
|
///
Сообщений: 9,552
Регистрация: 02.04.2005
Возраст: 45
|
STM32F103VGT6
кстати, а почему приводится к типу int, а не char? И зачем вообще приводить -я сделал просто (((unsigned char*)Data)[I] & 0xFF). - работает. МОжет, при условии, что кроме unsigned char ничего не ожидается, приведение не нужно? |
|
|
|
|
#18 | |
|
Форумец
Сообщений: 44,633
Регистрация: 27.05.2003
Возраст: 48
|
во вы творите
![]() Цитата:
|
|
|
|
|
|
#20 |
|
Форумец
Сообщений: 44,633
Регистрация: 27.05.2003
Возраст: 48
|
|
|
|
|
|
#22 |
|
Форумец
Сообщений: 44,633
Регистрация: 27.05.2003
Возраст: 48
|
|
|
|
|
|
#23 | |
|
///
Сообщений: 9,552
Регистрация: 02.04.2005
Возраст: 45
|
Spectator,
Цитата:
А буддийский тип не подскажете? Который в памяти чакры открывает? |
|
|
|
|
|
#24 |
|
highly mean
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 36
|
Здесь по идее должно быть что-то вроде (unsigned int*)Data[i] (если там действительно два байта на символ), но нужно посмотреть определение PAnsiChar, поскольку судя по выводу гугла скорее всего Spectator путает его с PChar.
|
|
|
|
|
#26 |
|
Форумец
Сообщений: 44,633
Регистрация: 27.05.2003
Возраст: 48
|
|
|
|
|
|
#27 | ||
|
Registered User
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 58
|
Цитата:
А получилось вам сделать вот этот фрагмент Цитата:
По-поводу того что int православнее в данном случае я бы поспорил. Если у Евгения, библиотека обрабатывает, по 1 байту из потока, зачем ему использовать int? Где он выиграет? |
||
|
|
|
|
#30 |
|
Форумец
Сообщений: 44,633
Регистрация: 27.05.2003
Возраст: 48
|
почему int самый православный тип. еще раз, хотя я уже объяснял.
по правилам и идее размерность (в байтах) инта должна быть равна разрядности процессора. это самый родной для процессора тип данных. для оперирования целыми числами с большей или меньшей размерностью процессор либо обрезает данные в регистрах, либо задействует память свыше одного регистра. ПОЭТОМУ в случаях, когда не ТРЕБУЕТСЯ использовать более другой тип данных, нужно использовать именно int. |
|
|