Я считываю из блоб-поля в базе данных некий набор байт.
Делается это так:
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
и спокойно бы работал
Здравствуйте 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 * и инициализировать массив.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
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 сети с удаленного компьютера
Здравствуйте VladD2, Вы писали:
TK>>Перд преобразованием указатель желательно зафиксировать.
VD>Это приведет к фнсэйф-коду. Если это не желательно, можно импортировать из длл-и нечто вроде memcpy и описать параметры как массивы нужного типа.
Изначальный вопрос был: Необходимо небезопасное приведения типов в C#
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.