我正在编写一个控制台应用程序,它将从Chrome扩展程序中获取一些数据并通过电子邮件将报告发送给我。数据以JSON格式存储在本地存储文件中,该文件是一个sqlite数据库。如果我复制十六进制并在线通过http://string-functions.com/hex-string.aspx进行转换,它将正确转换为JSON。但是,无论我如何尝试在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();
}
任何帮助表示赞赏。谢谢!
参考方案
尝试下面的代码。
如下所述更改try
的ConvertHex
块。
查看评论以获取详细信息。
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…