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

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

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

这是我的主要代码部分:

     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();
    }

任何帮助表示赞赏。谢谢!

参考方案

尝试下面的代码。

如下所述更改tryConvertHex块。

查看评论以获取详细信息。

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;
}

将SQLite db文件放在JAVA项目中的位置在哪里? - java

我在Windows 7中使用eclipse进行JAVA开发,并将项目放在D:\ workspace中。以下代码试图连接到SQLite数据库,而jdbc地址为jdbc:sqlite:sample.db时,JAVA在何处寻找sample.db?public class Sample{ public static void main(String[] args) …

Java string.hashcode()提供不同的值 - java

我已经在这个问题上停留了几个小时。我已经注释掉所有代码,认为这与数组超出范围有关,但是这种情况仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并稍后使用哈希码获取该数据。但是哈希值不断变化。public static void main(String[] args) { //only prior code is to access data char…

string.split(“ _(B”) - java

基本上,这行代码行不通,我不确定原因: String[] stringHolder = string.split("_(B"); 我收到此错误:索引3附近的未封闭组此行代码有效: String[] stringHolder = string.split("_B"); 因此,这使我相信它是由“(”引起的。有人可以告诉我如…

为什么要使用Func <string>而不是string? - c#

为什么要使用Func<string>而不是string?我的问题特别是关于this回购。有问题的行是22: private static Func<string> getToken = () => Environment.GetEnvironmentVariable("GitHubToken", Enviro…

Java中的Boolean.valueOf(String)和BooleanUtils.toBoolean(String)? - java

我在Boolean.valueOf(String)和BooleanUtils.toBoolean(String)之间有一个不同的问题 。我使用我的应用程序就像代码BooleanUtils.toBoolean(defaultInfoRow.getFolderType())一样,而Boolean.valueOf(defaultInfoRow.getFolderT…