【问题标题】:Redis Booksleeve, HGETALL and converting byte array to longRedis Booksleeve,HGETALL 并将字节数组转换为长
【发布时间】:2013-11-27 19:01:29
【问题描述】:

我正在使用 Booksleeve 通过 C# 代码与 Redis 进行通信。代码首先从哈希中检索所有字段和值:

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

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

对 Hashes.GetAll 的调用将字段值作为字节数组返回。问题是,如何将此字节数组转换为 C# long

例如,如果我使用 Hashes.GetInt64 来检索值,我会返回 9684,这是正确的。但我无法将检索到的字节数组转换为 long 以便它匹配这个值:

BitConverter.ToInt64(redisHashValue, 0) throws ArgumentException

BitConverter.ToInt32(redisHashValue, 0) returns 876099129

BitConverter.ToInt16(redisHashValue, 0) returns 13881

【问题讨论】:

    标签: c# redis booksleeve


    【解决方案1】:

    好吧,首先将字节数组转换为字符串似乎可以解决问题:

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

    但是有更好的解决方案吗?

    【讨论】:

    • 制作一个可以支持所有不同的返回类型的API是......从根本上说是棘手的;我需要重新设计集群的 API,我很想做一些更像是返回每个 struct RedisValue 的事情,它在内部 具有一个字节数组,但它提供隐式转换运算符为stringintlongfloatdoublebyte[]。我想不出比这更有用的东西了,但我愿意接受建议......
    猜你喜欢
    • 2020-11-22
    • 2014-08-08
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    相关资源
    最近更新 更多