C#将object []转换为byte [],但如何将byte对象保存为byte?

我正在使用Convert an array of different value types to a byte array解决方案为我的对象进行字节数组转换.

但我有一个小问题,导致一个大问题.

在object []的mids中有“byte”类型的数据,我不知道如何保持“byte”不变.我需要保持前后相同的字节长度.

我尝试在字典中添加“byte”类型,如下所示:

private static readonlyDictionary<Type, Func<object, byte[]>> Converters =
    new Dictionary<Type, Func<object, byte[]>>()
{
    { typeof(byte), o => BitConverter.GetBytes((byte) o) },
    { typeof(int), o => BitConverter.GetBytes((int) o) },
    { typeof(UInt16), o => BitConverter.GetBytes((UInt16) o) },
    ...
};
public static void ToBytes(object[] data, byte[] buffer)
{
    int offset = 0;

    foreach (object obj in data)
    {
        if (obj == null)
        {
            // Or do whatever you want
            throw new ArgumentException("Unable to convert null values");
        }
        Func<object, byte[]> converter;
        if (!Converters.TryGetValue(obj.GetType(), out converter))
        {
            throw new ArgumentException("No converter for " + obj.GetType());
        }

        byte[] obytes = converter(obj);
        Buffer.BlockCopy(obytes, 0, buffer, offset, obytes.Length);
        offset += obytes.Length;
    }
}

没有syntext抱怨,但我在程序执行后跟踪了这段代码

byte[] obytes = converter(obj);

原始的“字节”变为字节[2].

这里发生了什么?如何在此解决方案中保持字节值可靠?

谢谢!

最佳答案
没有BitConverter.GetBytes重载占用一个字节,所以你的代码:

BitConverter.GetBytes((byte) o)

被隐式扩展为最接近的匹配:BitConverter.GetBytes(short)(Int16),产生两个字节.您需要做的就是返回一个单元素字节数组,例如像这样:

{ typeof(byte), o => new[] { (byte) o } }

转载注明原文:C#将object []转换为byte [],但如何将byte对象保存为byte? - 代码日志