我正在尝试在c#中编写一个包装器,而不是为每个基本类型重载包函数,我试图使用动态变量来处理更广泛的值。目前我只期望传入GetSizeOf函数中找到的变量类型,如果传递任何其他内容,将抛出异常。但是我很难将价值投入到ulong中。我用int32,byte和int尝试过它。另外,data是一个字符串,当完成打包时应该包含打包数据的二进制序列,包括多余的0。
如果有更好的方法,请告诉我。
public static int GetSizeOf<V>(V v)
{
if (v is Byte) { return sizeof(Byte) * 8; };
if (v is SByte) { return sizeof(SByte) * 8; };
if (v is Int16) { return sizeof(Int16) * 8; };
if (v is UInt16) { return sizeof(UInt16) * 8; };
if (v is Int32) { return sizeof(Int32) * 8; };
if (v is UInt32) { return sizeof(UInt32) * 8; };
if (v is Int64) { return sizeof(Int64) * 8; };
if (v is UInt64) { return sizeof(UInt64) * 8; };
throw new Exception("Unable to determine size of " + typeof(V));
}
public void pack<T>(T value)
{
if (!(value as ulong?).HasValue)
throw new Exception("Unable to cast " + typeof(T) + " as ulong");
ulong num = (value as ulong?).Value;
int size = GetSizeOf(value);
for (int i = 0; i < size; i++)
{
data = (num & 1) + data;
num >>= 1;
}
}