Używam rozwiązania Convert an array of different value types to a byte array dla moich obiektów do konwersji tablicy bajtów.C# przekształcić obiekt [] na bajt [], ale jak zachować bajt jako bajt?
Ale mam mały problem, który powoduje duży problem.
Istnieje typ danych "bajtowych" w środku obiektu [], nie wiem jak zachować "bajt", jak jest. Potrzebuję zachować tę samą długość bajtów przed i po.
Próbowałem dodać „bajt” typ do słownika jak ten:
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;
}
}
nie ma syntext skarży, ale prześledzić ten kod, po program wykonywany
byte[] obytes = converter(obj);
oryginalny " "bajt" staje się bajtem [2].
Co się tutaj dzieje? Jak zachować autentyczność bajtu w tym rozwiązaniu?
Dzięki!
Nie jest jasne, co się tutaj dzieje. Czy możesz pokazać kod, który tworzy obiekt, a także kod, który go rozpakowuje? – cdhowie
Otrzymujesz tablicę, ponieważ 'GetBytes' zwraca tablicę. Co dokładnie próbujesz zrobić, ponieważ nie jest to jasne. –
Zaktualizowałem mój oryginalny post. Wiem, że GetBytes zwraca tablicę, ale chcę, aby zwróciła bajt [1] dla mojej oryginalnej wartości bajtu. –