C# 解析二进制Redis密钥
我给Redis写了一个16字节的二进制密钥。当我查询密钥时,它以以下格式返回:C# 解析二进制Redis密钥,c#,string,redis,C#,String,Redis,我给Redis写了一个16字节的二进制密钥。当我查询密钥时,它以以下格式返回: \xc9;\xfd5\x80\x00\xa9Z\xc9\x0fb\xef\x7f\xd6V] 这个字符串是什么格式的?看起来应该是十六进制(\x),但其中还有其他字符不是有效的十六进制字符 如何将此字符串转换回原始字节数组字节[](使用C#)?您似乎编写了一个字节数组字节[],但将其作为字符串读取。有些代码如0x35对应于有效的ASCII字符('5'),有些代码如0x00则不对应,因此表示为\x00,因此您有一个奇
\xc9;\xfd5\x80\x00\xa9Z\xc9\x0fb\xef\x7f\xd6V]
这个字符串是什么格式的?看起来应该是十六进制(\x
),但其中还有其他字符不是有效的十六进制字符
如何将此字符串
转换回原始字节数组字节[]
(使用C#)?您似乎编写了一个字节数组字节[]
,但将其作为字符串
读取。有些代码如0x35
对应于有效的ASCII字符('5'
),有些代码如0x00
则不对应,因此表示为\x00
,因此您有一个奇怪的字符串
让我们尝试将合成的字符串解析回原始的字节[]
首先,让我们摆脱\x..
格式,并借助正则表达式获得一个有效字符串:
using System.Text.RegularExpressions;
...
string source = @"\xc9;\xfd5\x80\x00\xa9Z\xc9\x0fb\xef\x7f\xd6V]";
string result = Regex.Replace(
source,
@"\\x[0-9A-Fa-f]{2}",
m => ((char)Convert.ToInt32(m.Value.Substring(2), 16)).ToString());
其次,假设所有字符都是ASCII,我们从字符串中获取字节[]
:
byte[] array = result
.Select(c => (byte)c)
.ToArray();
让我们看看数组
:
Console.Write(string.Join(", ", array.Select(x => $"{x:x2}")));
结果:
c9, 3b, fd, 35, 80, 00, a9, 5a, c9, 0f, 62, ef, 7f, d6, 56, 5d
您如何查询密钥?钥匙命令?你会以不同的格式取回它,这似乎很奇怪。发布设置和查询密钥的代码是初始数组[c9、3b、fd、35、80、00、a9、5a、c9、0f、62、ef、7f、d6、56、5d]
(十进制:[201、59、253、53、128、0、169、90、201、15、98、239、127、214、86、93]
)?@ste-fu-是的,它是用StackExchange.Redis以字节[]
并使用KEYS命令读回,因此它以不同(可打印)格式返回。