gpt4 book ai didi

c# - 将 SQLite Blob 转换为十六进制再转换为字符串

转载 作者:行者123 更新时间:2023-12-02 02:47:13 26 4
gpt4 key购买 nike

我正在编写一个控制台应用程序,它将从 Chrome 扩展程序中获取一些数据并通过电子邮件向我发送报告。数据以 JSON 形式存储在 localstorage 文件中,该文件是一个 sqlite 数据库。如果我复制十六进制并在线转换它 http://string-functions.com/hex-string.aspx它正确地转换为 JSON。但是,无论我如何尝试在 C# 中执行此操作,它看起来都是这样的:

enter image description here

这是我的代码的主要部分:

     static void Main(string[] args)
{
var dbLocation = ConfigurationManager.AppSettings["dbLocation"];
using (var connection = new SQLiteConnection(string.Format("Data Source={0};Version=3;", dbLocation)))
{
connection.Open();
var response = connection.Query<string>("SELECT hex(value) FROM ItemTable WHERE key = 'state'").Single();
var json = ConvertHex(response);
//var response = JsonConvert.DeserializeObject<ChromeData>(json);
}
}

对于 ConvertHex 函数,这是我尝试过的所有方法,所有这些都具有相同的结果。这些是从其他各种 StackOverflow 答案中提取的。

    public static string ConvertHex(String hexString)
{
try
{
string ascii = string.Empty;

for (int i = 0; i < hexString.Length; i += 2)
{
String hs = string.Empty;

hs = hexString.Substring(i, 2);
uint decval = System.Convert.ToUInt32(hs, 16);
char character = System.Convert.ToChar(decval);
ascii += character;

}

return ascii;
}
catch (Exception ex) { Console.WriteLine(ex.Message); }

return string.Empty;
}

private static string HexString2Ascii(string hexString)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= hexString.Length - 2; i += 2)
{
sb.Append(Convert.ToString(Convert.ToChar(Int32.Parse(hexString.Substring(i, 2), System.Globalization.NumberStyles.HexNumber))));
}
return sb.ToString();
}

public static byte[] FromHex(string hex)
{
hex = hex.Replace("-", "");
byte[] raw = new byte[hex.Length / 2];
for (int i = 0; i < raw.Length; i++)
{
raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
}
return raw;
}

static string HexStringToString(string hexString)
{
if (hexString == null || (hexString.Length & 1) == 1)
{
throw new ArgumentException();
}
var sb = new StringBuilder();
for (var i = 0; i < hexString.Length; i += 2)
{
var hexChar = hexString.Substring(i, 2);
sb.Append((char)Convert.ToByte(hexChar, 16));
}
return sb.ToString();
}

感谢任何帮助。谢谢!

最佳答案

尝试下面的代码。

如下所示更改 ConvertHextry block 。

查看评论了解详细信息。

public static string ConvertHex(String hexString)
{
try
{
//DECLARE A VARIABLE TO RETURN
string ascii = string.Empty;

//SPLIT THE HEX STRING BASED ON SPACE (ONE SPACE BETWEEN TWO NUMBERS)
string[] hexSplit = hexString.Split(' ');

//LOOP THROUGH THE EACH HEX SPLIT
foreach (String hex in hexSplit)
{
// CONVERT THE NUMBER TO BASE 16
int value = Convert.ToInt32(hex, 16);

// GET THE RESPECTIVE CHARACTER
string stringValue = Char.ConvertFromUtf32(value);
char charValue = (char)value;

//APPEND THE STRING
ascii += charValue;
}

//RETURN THE STRING
return ascii;
}
catch (Exception ex) { Console.WriteLine(ex.Message); }

return string.Empty;
}

关于c# - 将 SQLite Blob 转换为十六进制再转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46246338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com