私はオブジェクトをバイト配列に変換するためにConvert an array of different value types to a byte arrayソリューションを使用しています。オブジェクト#をバイト[]に変換するのに、バイトオブジェクトをバイトとして保持する方法はありますか?
しかし、私は大きな問題を引き起こす小さな問題があります。
オブジェクト[]のミドルには「バイト」タイプのデータがありますが、「バイト」をそのまま保持する方法はわかりません。前後に同じバイト長を保持する必要があります。
私はこのような辞書に「バイト」タイプを追加してみました:
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]になります。
ここではどうなりますか?このソリューションでバイト値を本物に保つにはどうすればいいですか?
ありがとうございます!
ここでは何が起こっているのかはっきりしません。あなたはオブジェクトを作成するコードとそれを解凍するコードを表示できますか? – cdhowie
'GetBytes'が配列を返すので、配列を取得しています。それがはっきりしていないので、ここでは正確に何をしようとしていますか? –
元の投稿を更新しました。私はGetBytesが配列を返すことを知っていますが、私はそれが私のorignialバイト値のためにbyte [1]を返すことを望みます。 –