Необходимо небезопасное приведения типов в C#
От: krabat  
Дата: 22.10.02 11:15
Оценка:
Я считываю из блоб-поля в базе данных некий набор байт.
Делается это так:
DataRow[] BlobData = DataSet.Select("ID = '1'");
ByteMapData = BlobData[j].ItemArray[0] as Byte[];

Но при записи в блоб-поле находились значения типа Double

а DoubleMapData = (Double[])BlobData[j].ItemArray[0];
выдает
An unhandled exception of type 'System.InvalidCastException' occurred in autocad.dll
Additional information: Specified cast is not valid.

Каким бы образом можно было преобразовать эту бяку?
При этом размер правильный;

Ну если бы это делалось в C++ я бы попросту преобразовал ссылку на начало массива к double
и спокойно бы работал
Re: Необходимо небезопасное приведения типов в C#
От: TK Лес кывт.рф
Дата: 22.10.02 11:44
Оценка:
Здравствуйте krabat, Вы писали:

K>Я считываю из блоб-поля в базе данных некий набор байт.

K>Делается это так:
K>DataRow[] BlobData = DataSet.Select("ID = '1'");
K>ByteMapData = BlobData[j].ItemArray[0] as Byte[];

K>Но при записи в блоб-поле находились значения типа Double


K>а DoubleMapData = (Double[])BlobData[j].ItemArray[0];

K>выдает
K>An unhandled exception of type 'System.InvalidCastException' occurred in autocad.dll
K>Additional information: Specified cast is not valid.

K>Каким бы образом можно было преобразовать эту бяку?

K>При этом размер правильный;

K>Ну если бы это делалось в C++ я бы попросту преобразовал ссылку на начало массива к double

K>и спокойно бы работал

Преобразовать Byte[] к double * и инициализировать массив.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: не получается
От: krabat  
Дата: 22.10.02 12:10
Оценка:
TK>Преобразовать Byte[] к double * и инициализировать массив.

d = (double*)Byt;

Cannot convert type byte[] to double*
Re: Необходимо небезопасное приведения типов в C#
От: Banch  
Дата: 22.10.02 12:58
Оценка:
Здравствуйте krabat, Вы писали:

K>Каким бы образом можно было преобразовать эту бяку?


в C# нельзя так просто развлекаться с типами,
придется запихнуть массив байn в MemoryStream и читать оттуда с помощью BinaryReader.ReadDouble
Re[2]: Необходимо небезопасное приведения типов в C#
От: krabat  
Дата: 22.10.02 15:26
Оценка:
Здравствуйте Banch, Вы писали:



K>>Каким бы образом можно было преобразовать эту бяку?


B>в C# нельзя так просто развлекаться с типами,

B>придется запихнуть массив байn в MemoryStream и читать оттуда с помощью BinaryReader.ReadDouble

Спасибо всем ответившим. Я нашел более простой (хотя и несколько более медленный способ).

double[] d = new double[Byt.Length/8]
for(int k =0; k!=Byt.Length/8;k++)
d[k] = System.BitConverter.ToDouble(Byt,k*8);

вот так, по-паскалевски Но пока скорость некритична (кстати, мне думается, что Memory Stream будет ненамного быстрее), ибо основное время занимает трансфер данных по 10mbit сети с удаленного компьютера
Re[3]: не получается
От: TK Лес кывт.рф
Дата: 22.10.02 18:10
Оценка:
Здравствуйте krabat, Вы писали:



TK>>Преобразовать Byte[] к double * и инициализировать массив.


K>d = (double*)Byt;


K>Cannot convert type byte[] to double*


Перд преобразованием указатель желательно зафиксировать.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: не получается
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.02 21:41
Оценка:
Здравствуйте TK, Вы писали:

TK>Перд преобразованием указатель желательно зафиксировать.


Это приведет к фнсэйф-коду. Если это не желательно, можно импортировать из длл-и нечто вроде memcpy и описать параметры как массивы нужного типа.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1026.238 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: не получается
От: TK Лес кывт.рф
Дата: 22.10.02 22:32
Оценка:
Здравствуйте VladD2, Вы писали:

TK>>Перд преобразованием указатель желательно зафиксировать.


VD>Это приведет к фнсэйф-коду. Если это не желательно, можно импортировать из длл-и нечто вроде memcpy и описать параметры как массивы нужного типа.


Изначальный вопрос был: Необходимо небезопасное приведения типов в C#
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.