Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считать данные по указателю 
V
    Опции темы
CYBERDREAM
Дата 21.11.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



Чувствую заколебал уже с указателями в последнее время, но это кажись последний вопрос по этому поводу ( по крайней мере сейчас так думается)
Код

......
char EPCString[30];        
FormatEPC(EPCString, _inventoryNtf->Epc, _inventoryNtf->EpcLen);
//_inventoryNtf->Epc        -  unsigned short * 
//_inventoryNtf->EpcLen  -  unsigned int
void FormatEPC(char *buffer, unsigned short *EPCData, unsigned int EPCLength)
{
    if (0 == EPCLength)
    {
        strcpy(buffer,"(Blank EPC)");
    }
    else
    {
        char *scratch = buffer;
        unsigned short *epcIter = EPCData;
        unsigned int epcLenIter = 0;

        while (epcLenIter < EPCLength)
        {
            printf("Iter: %s",epcIter);
            //Format with dashes betwen word boundaries to improve readability
            sprintf(scratch, ((epcLenIter < EPCLength-1) ? "%04X-":"%04X"), *epcIter);
            scratch += 5;
            epcIter++;
            epcLenIter++;
        }
    }
}

Здесь суть в том, что по указателю число кадиется в шестнадцетиричном виде (с дополнением до 4 символов) в scratch.

Собственно вопрос: как по указетелю извлечь наше число типа ushort, для его последующего преобразования?

Это сообщение отредактировал(а) CYBERDREAM - 21.11.2007, 18:07


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
1stain
Дата 21.11.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 8
Всего: 40



что-то непонятно, что ты хочешь cделать?
насколько я понял, здесь суть в том, что дамп памяти сохраняется в строку в hex формате по два байта. Вроде в C# то же самое можно сделать без вызова unmanaged кода в блоке unsafe



--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
CYBERDREAM
Дата 22.11.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



пошел в сторону unsafe. Вот такая вот загвоздка возникла:
в функцию передают массив типа char, а принимает она как указатель на char.

Код

    char EPCString[30];
    FormatEPC(EPCString, _inventoryNtf->Epc, _inventoryNtf->EpcLen);
  ...
}
void FormatEPC(char *buffer, unsigned short *EPCData, unsigned int EPCLength)
{
   .....
   .....
}


Как сделать указатель типа char на массив char? Ибо так разумеется не хочет: char *_epc=&buffer;

Это сообщение отредактировал(а) CYBERDREAM - 22.11.2007, 12:11


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
1stain
Дата 22.11.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 8
Всего: 40



Код

   class Program
    {

        static void Main(string[] args)
        {

            UInt16 x = 100;
            unsafe
            {
                Console.WriteLine(GetMemoryDumpUint( &x , 1));
            }
         }

        public static unsafe string GetMemoryDumpUint ( UInt16 *pointer, int count )
        {
            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < count; ++i, pointer++)
                sb.AppendFormat("{0:X} ", *pointer);

            return sb.ToString();
        }
    }



--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
CYBERDREAM
Дата 22.11.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



данный способ не пашет  smile 


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
CYBERDREAM
Дата 22.11.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



Главное, как можно считать данные из указателя EPCIter в 16й сс в нужную массив?


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
CYBERDREAM
Дата 23.11.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



Оказалось как всегда проще, чем казалось и думалось. Значение указателя и нужно было представлять в 16 сс
Код

Console.WriteLine("Recieved value: "+String.Format("{0:X}",Int32.Parse(epcIter->ToString())));

Thx to 1stain  smile 


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.