Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Считать данные по указателю


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

......
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, для его последующего преобразования?

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

Автор: CYBERDREAM 22.11.2007, 12:09
пошел в сторону 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;

Автор: 1stain 22.11.2007, 13:20
Код

   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();
        }
    }

Автор: CYBERDREAM 22.11.2007, 16:00
данный способ не пашет  smile 

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

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

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

Thx to 1stain  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)