2013-11-27 3 views
2

Я использую 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 

ответ

1

Ну, преобразуя массив байт первым в строку, кажется, сделать трюк:

long.Parse(Encoding.UTF8.GetString(redisHashValue)); 

Но есть ли лучшее решение?

+2

Создание API, который может поддерживать все разные типы возвращаемых данных *, является принципиально сложным; Мне нужно перекомпилировать API для кластера, и мне очень хочется сделать что-то более похожее на возвращение каждого из них как 'struct RedisValue', который внутренне ** имеет ** байтовый массив, но который предлагает неявное преобразование операторам 'string',' int', 'long',' float', 'double' и' byte [] '. Я не могу придумать ничего более полезного, чем это, но я открыт для предложений ... –

Смежные вопросы