2013-11-27 126 views
2

我正在使用Booksleeve從C#代碼與Redis進行通信。該代碼首先從散列中檢索所有字段和值:Redis Booksleeve,HGETALL並將字節數組轉換爲long

var vals = await Redis.Hashes.GetAll(0, redisKey); 

散列包含具有long類型值的字段。

對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,並且我非常想要做一些更像是將''RedisValue''返回的結構,它在內部**有一個字節數組,但是它提供了隱式轉換運算符爲'string','int','long','float','double'和'byte []'。我想不出比這更有用的東西,但我願意接受建議...... –

相關問題