Я использую Booksleeve для связи с Redis с кодом C#. Код сначала получает все поля и значения из хэша:Redis Booksleeve, HGETALL и преобразование байтового массива в long
var vals = await Redis.Hashes.GetAll(0, redisKey);
хэш содержит поля, которые имеют значения типа длиной.
Вызов Hashes.GetAll возвращает значения полей в виде массивов байтов. Вопрос в том, Как я могу преобразовать этот массив байтов в C# long?
Например, если я использую Hashes.GetInt64 для извлечения значения, я возвращаюсь обратно 9684, что является правильным. Но я не в состоянии преобразовать извлеченный массив байт долго, так что он будет соответствовать этому значению:
BitConverter.ToInt64(redisHashValue, 0) throws ArgumentException
BitConverter.ToInt32(redisHashValue, 0) returns 876099129
BitConverter.ToInt16(redisHashValue, 0) returns 13881
Создание API, который может поддерживать все разные типы возвращаемых данных *, является принципиально сложным; Мне нужно перекомпилировать API для кластера, и мне очень хочется сделать что-то более похожее на возвращение каждого из них как 'struct RedisValue', который внутренне ** имеет ** байтовый массив, но который предлагает неявное преобразование операторам 'string',' int', 'long',' float', 'double' и' byte [] '. Я не могу придумать ничего более полезного, чем это, но я открыт для предложений ... –