Я написал и протестировал этот класс C# (который я хорошо протестировал):
Код: Выделить всё
using System;
using System.Linq;
using System.Reflection;
namespace SqlServerCast
{
public class SqlServerCast
{
static public char ByteOrder;
public enum ByteOrderEnum {
BigEndian = 1, /* The most significant byte (highest address) is stored first. */
LittleEndian = 0 /* The least significant byte (lowest address) is stored first. */}
public static void Main()
{
Assembly assem = typeof(SqlServerCast).Assembly;
Object o = assem.CreateInstance("SqlServerCast", false,
BindingFlags.ExactBinding,
null, new Object[] { 2 }, null, null);
}
public SqlServerCast(char val) // constructor
{
if (val != 0) ByteOrder = (char) ByteOrderEnum.BigEndian;
else ByteOrder = (char) ByteOrderEnum.LittleEndian;
}
public static double CastToDBL(string str) {return BitConverter.ToDouble(StringToByteArray(str), 0);}
public static float CastToSGL(string str) {return BitConverter.ToSingle(StringToByteArray(str), 0);}
private static string Dash = "-", NullStr = null;
public static string CastFromDBL(double dbl) {
switch (ByteOrder)
{
case (char)ByteOrderEnum.BigEndian: // actually, network byte order, big endian
byte[] bytes = BitConverter.GetBytes(dbl);
return BitConverter.ToString(bytes.Reverse().ToArray()).Replace(Dash, NullStr);
case (char)ByteOrderEnum.LittleEndian:
return BitConverter.ToString(BitConverter.GetBytes(dbl)).Replace(Dash, NullStr);
default:
return null;
}
}
public static string CastFromSGL(float sgl)
{
switch (ByteOrder)
{
case (char)ByteOrderEnum.BigEndian: // actually, network byte order, big endian
byte[] bytes = BitConverter.GetBytes(sgl);
return BitConverter.ToString(bytes.Reverse().ToArray()).Replace(Dash, NullStr);
case (char)ByteOrderEnum.LittleEndian:
return BitConverter.ToString(BitConverter.GetBytes(sgl)).Replace(Dash, NullStr);
default:
return null;
}
}
private static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
switch (ByteOrder) {
case (char) ByteOrderEnum.BigEndian: // actually, network byte order, big endian
return bytes.Reverse().ToArray();
case (char) ByteOrderEnum.LittleEndian:
return bytes;
default:
return null;
}
}
}
}
Сообщение 6544, уровень 16, состояние 1, строка 1
Создать сборку для сборки «SqlServerCast» не удалось, поскольку сборка «SqlServerCast» имеет неправильный формат или не является чистой сборкой .NET.
Непроверяемый PE-заголовок/собственная заглушка.
Может ли кто-нибудь дать мне пошаговый путь к успеху здесь? Я застрял...
Кстати: я знаю о создании хэшей, но пока не думаю, что это проблема.
Подробнее здесь: https://stackoverflow.com/questions/713 ... sql-server
Мобильная версия