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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование типов 
:(
    Опции темы
Vyacheslav
Дата 16.3.2005, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 2
Всего: 59



Кто поскажет, как эффективно сделать следущее. По сокету мне приходит массив байтов
Byte []. Как, например преобразовать первый два байта в UInt16, следушие 4 байта в UInt32.
Элементарные вещи, в managed C++ это для меня проблема.


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
[Last]Wizard
Дата 16.3.2005, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.7.2004
Где: Минск, Беларусь

Репутация: 4
Всего: 10



Первое, что приходит на ум:
Код
// arr - массив байтов
UInt16 num1 = arr[0]<<8 + arr[1];
UInt32 num2 = arr[2]<<24 + arr[3]<<16 + arr[4]<<8 + arr[5];

PM ICQ   Вверх
Vyacheslav
Дата 16.3.2005, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 2
Всего: 59



Спасибо. Но мне, к сожалению, пришло тоже нечто подобное smile Уж очень неуклюже выгдядит.


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 16.3.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



А методы ToUInt16, ToUInt32 класса BitConverter?
http://msdn.microsoft.com/library/default....emberstopic.asp


--------------------

PM   Вверх
Vyacheslav
Дата 16.3.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 2
Всего: 59



Похоже то, что надо.

А то я уже с помощью template решил вопрос
Код

template <typename T>
void GetValue(T& Value, Byte Buffer __gc[], int Offset)
{
    for (int i = Offset + sizeof(T); i > Offset; --i) {
        Value <<= BYTE_SIZE;
        Value += Buffer[i - 1];            
    }
}


template<typename T >
void SetValue(T Value, Byte Buffer __gc[], int Offset)
{
    for(int i = Offset; i < Offset + sizeof(T); i++) {
        Buffer[i] = Value;
        Value >>= BYTE_SIZE;
    }
}




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 16.3.2005, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 2
Всего: 59



А еще вопрос. Можно ли структуру перевести в массив байтов и обратно


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 17.3.2005, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(Vyacheslav @ 16.3.2005, 10:15)
А еще вопрос. Можно ли структуру перевести в массив байтов и обратно


Если тебе нужно писать структуру в стрим, то проще ее сериализовать, что-то типа
Код

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace ConsoleApplication1
{
    [Serializable]
    struct Person
    {
         public String name;
         public String phone;
         public Person(String name, String phone)
       {
           this.name = name;
           this.phone = phone;
       }
    }

    class Class1
    {    
       static void Main(string[] args)
        {
           Person p = new Person("John Doe", "290-3487");
           BinaryFormatter bf = new BinaryFormatter();
           FileStream fs = File.Create("Person.ser");
           bf.Serialize(fs, p);
           fs.Close();
       }
    }
}

- это в файл.


--------------------

PM   Вверх
Vyacheslav
Дата 17.3.2005, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 2
Всего: 59



Про сериализацию понятно. Вопрос в том, что мне приходит уже готовый набор данных, который создан посредством тупого копирования куска памяти, где лежит структура, в массив. Можно ли организовать сериализацию таким образом, что было возможность из этого массива восстановить структуру и при необходимости в таком же виде сохранить?


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 17.3.2005, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Можно сериализовать объект как хочешь, для этого он должен наследовать от ISerializable
http://msdn.microsoft.com/library/default....eclasstopic.asp


--------------------

PM   Вверх
Vyacheslav
Дата 18.3.2005, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 2
Всего: 59



Нашел приемлимое решение
Код

Byte temp[];
...
MY_STRUCT data;

 { // ограничиваем время жизни __pin указателя
    void __pin* fixed  = &temp[0];
    data  = *reinterpret_cast< MY_STRUCT* >(fixed);
 }




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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