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


Автор: MasterOfCode 6.8.2008, 15:06
В  БД MS SQL хранится в поле типа Image набор байт.
В Делфи, есть тип record имеет 2 поля long и float
Этот тип преобразуют в байты и сохраняют туда (В Image Field Type)!
Моя задача сделать такой же набор байт для того чтоб туда загрузить. Только не хочу возвращатся к делфи.
Вопрос такой, если например Сделаю класс 
Код

cImageField
{
    List<long> l;
    List<float> f;
    . . .
}

Как его преобразовать в набор байт?

Автор: Partizan 6.8.2008, 16:18
было уже причём недавно...в поиск...
по-моему там было предложено BitConverter использовать...

как вариант - бинарная сериализация в MemoryStream.


Автор: MasterOfCode 7.8.2008, 06:03
Получается так:
В массиве - 3280 байт.
я знаю что там 410 записей. поскольку 1 запись включает в себя 2 числа, long и float, то 410 х 2 = 820, 3280/820=4. Получается тип long и float имеет 4 byte? Т.е. можно каким то способом создать массив байт и в него загнать эти байты? Что использовать чтоб загонять туда эти байты, MemoryStream?

Автор: MasterOfCode 7.8.2008, 07:31
Все, разобрался, оказывается разработчики дали неверную информацию, у них тип не long а обычный int32. Из за этого и не получались расчеты. smile Сделал так:
Код

                byte[] b = (byte[])cmdSQL.ExecuteScalar();
                byte[] bc = new byte[4];
                bool f = false;
                for (int i = 0, j = 0; i < b.Length; i++)
                {
                    if (j < 4)
                    {
                        bc[j] = b[i];
                        j++;
                    }
                    else
                    {
                        j = 1;
                        if (f)
                        {
                            Console.WriteLine(BitConverter.ToSingle(bc, 0).ToString());
                            f = !f;
                        }
                        else
                        {
                            Console.WriteLine(BitConverter.ToInt32(bc, 0).ToString());
                            f = !f;
                        }
                        bc[0] = b[i];
                    }
                }
                Console.WriteLine("Успех");
            }
            catch (Exception exception)
            {
                Console.WriteLine("Ошибка : " + exception.Message);
            }

Хотелось бы услышать, как можно этот код оптимизировать, не очень красиво с конструкцией if?

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