c#打开变量类型

时间:2015-04-15 16:13:41

标签: c# types type-conversion bitconverter

有可行的方法吗? 给定一个字节流将其转换为所需的数字类型。

(假设调用代码将处理与流中字节数相关的数据类型。)

    public void GetValue(byte[] bytes, ref UInt16 value)
    {
        if (BitConverter.IsLittleEndian)
            Array.Reverse(bytes);
        value = BitConverter.ToUInt16(bytes, 0);
    }
    public void GetValue(byte[] bytes, ref UInt32 value)
    {
        if (BitConverter.IsLittleEndian)
            Array.Reverse(bytes);
        value = BitConverter.ToUInt32(bytes, 0);
    }
    public void GetValue(byte[] bytes, ref UInt64 value)
    {
        if (BitConverter.IsLittleEndian)
            Array.Reverse(bytes);
        value = BitConverter.ToUInt64(bytes, 0);
    }
    etc...

我认为有一种更好的方法,例如,通过切换值的类型,而不是复制的重载。

1 个答案:

答案 0 :(得分:6)

那么你可以提取数组反转的条件,我根本不会使用重载:

public ushort GetUInt16(byte[] bytes)
{
    ReverseIfLittleEndian(bytes);
    return BitConverter.ToUInt16(bytes, 0);
}

public uint GetUInt32(byte[] bytes)
{
    ReverseIfLittleEndian(bytes);
    return BitConverter.ToUInt32(bytes, 0);
}

public ulong GetUInt64(byte[] bytes)
{
    ReverseIfLittleEndian(bytes);
    return BitConverter.ToUInt64(bytes, 0);
}

private static void ReverseIfLittleEndian(byte[] bytes)
{
    if (BitConverter.IsLittleEndian)
    {
        Array.Reverse(bytes);
    }
}

如果你真的想要采用一种方法,我会避免试图让自己变得可爱。坚持"简单易读"。是的,您最终得到了几种类似的方法 - 但每种方法都很容易理解,调用简单,基本上没有维护。听起来不错......