C# Implicit/Explicit 字节数组转换
C# Implicit/Explicit Byte Array Conversion
我有以下问题。我想将整数值或浮点值转换为字节数组。通常我使用 BitConverter.GetBytes() 方法。
int i = 10;
float a = 34.5F;
byte[] arr;
arr = BitConverter.GetBytes(i);
arr = BitConverter.GetBytes(a);
有没有可能用 implicit/explicit 方法做到这一点??
arr = i;
arr = a;
反之亦然??
i = arr;
a = arr;
你可以通过中间人class来完成。编译器不会自己做两个隐式转换,所以你必须做一个显式转换,然后编译器会计算出第二个。
问题在于,对于隐式转换,您必须将 转换为 或 from 您声明转换的类型,并且您不能像 'int'.
这样的密封 classes 继承
所以,一点都不优雅。扩展方法可能更优雅。
如果您在下面声明 class,您可以执行以下操作:
byte[] y = (Qwerty)3;
int x = (Qwerty) y;
public class Qwerty
{
private int _x;
public static implicit operator byte[](Qwerty rhs)
{
return BitConverter.GetBytes(rhs._x);
}
public static implicit operator int(Qwerty rhs)
{
return rhs._x;
}
public static implicit operator Qwerty(byte[] rhs)
{
return new Qwerty {_x = BitConverter.ToInt32(rhs, 0)};
}
public static implicit operator Qwerty(int rhs)
{
return new Qwerty {_x = rhs};
}
}
您可以创建扩展方法来稍微清理调用代码 - 所以您最终会得到:
int i = 10;
float a = 34.5F;
byte[] arr;
arr = i.ToByteArray();
arr = a.ToByteArray();
扩展方法的代码类似于:
public static class ExtensionMethods
{
public static byte[] ToByteArray(this int i)
{
return BitConverter.GetBytes(i);
}
public static byte[] ToByteArray(this float a)
{
return BitConverter.GetBytes(a);
}
}
我有以下问题。我想将整数值或浮点值转换为字节数组。通常我使用 BitConverter.GetBytes() 方法。
int i = 10;
float a = 34.5F;
byte[] arr;
arr = BitConverter.GetBytes(i);
arr = BitConverter.GetBytes(a);
有没有可能用 implicit/explicit 方法做到这一点??
arr = i;
arr = a;
反之亦然??
i = arr;
a = arr;
你可以通过中间人class来完成。编译器不会自己做两个隐式转换,所以你必须做一个显式转换,然后编译器会计算出第二个。
问题在于,对于隐式转换,您必须将 转换为 或 from 您声明转换的类型,并且您不能像 'int'.
这样的密封 classes 继承所以,一点都不优雅。扩展方法可能更优雅。
如果您在下面声明 class,您可以执行以下操作:
byte[] y = (Qwerty)3;
int x = (Qwerty) y;
public class Qwerty
{
private int _x;
public static implicit operator byte[](Qwerty rhs)
{
return BitConverter.GetBytes(rhs._x);
}
public static implicit operator int(Qwerty rhs)
{
return rhs._x;
}
public static implicit operator Qwerty(byte[] rhs)
{
return new Qwerty {_x = BitConverter.ToInt32(rhs, 0)};
}
public static implicit operator Qwerty(int rhs)
{
return new Qwerty {_x = rhs};
}
}
您可以创建扩展方法来稍微清理调用代码 - 所以您最终会得到:
int i = 10;
float a = 34.5F;
byte[] arr;
arr = i.ToByteArray();
arr = a.ToByteArray();
扩展方法的代码类似于:
public static class ExtensionMethods
{
public static byte[] ToByteArray(this int i)
{
return BitConverter.GetBytes(i);
}
public static byte[] ToByteArray(this float a)
{
return BitConverter.GetBytes(a);
}
}