如何读取文件中的32位十六进制字作为C#中的十六进制值而不是字符串(“e000483c”为“0xe000483c”)
问题描述:
我有一个输入文件,其中包含十六进制字记录列表,如“e000483c”,“0120003d ”。我想读取它们并以十六进制数字形式存储,而不是字符串形式。每个十六进制数字都是一个32位的字,应该能够按字节进一步处理。输入文件可以有大量记录,有没有更快更可靠的方法来实现这一点?如何读取文件中的32位十六进制字作为C#中的十六进制值而不是字符串(“e000483c”为“0xe000483c”)
我面临的问题实际上是,如果尝试在使用流读取器或File.ReadAllLines读取字符串之后尝试处理单词字节,则将这些字符视为字符。例如,我想将'e'读作'0xe'而不是'0x65'。
最终我想将“e000483c”解释为“0xe000483c”。
答
int value = Convert.ToInt32(hex, 16);
会导致字符串hex
在被转换到INT value.
将字符串转换为 “六角” 的字符串,简单地说0x
在面前:
string newValue = "0x" + oldValue;
你选择的方法真的取决于你想要1)一个整数还是2)一个十六进制字符串代表作为你的最终结果,你需要一个整数。
答
没有“十六进制数”这样的东西。您可以读取它以十六进制表示的字符串,也可以读取该字符串并将其转换为整数。
void Main()
{
string hexString = "e000483c";
int value = Convert.ToInt32(hexString, 16);
Console.WriteLine($"The hex string {hexString} is {value} in decimal");
}
// Define other methods and classes here
答
试试这个代码:
List<int> listOfHexValues = new List<int>();
var anArray = File.ReadAllLines(yourPath);
foreach (string hexStr in anArray)
{
try
{
int hex = int.Parse(temp, System.Globalization.NumberStyles.HexNumber);
listOfHexValues.Add(hex);
}
catch
{
//the line wasn't a valid integer.
}
}
这是假设你的文件有每行1张十六进制数。但是你应该知道int内部会将你的十六进制值转换为合适的十进制值。如果你想保持“0x00000000”格式,那么你需要把它们保持为字符串,对不起。
对你想要什么感到困惑,但对于它的价值: 将“e000483c”作为以“0x”开头的“int”存储是处理c#中十六进制值的最有效方式。 –
不知道我明白。你想保留它们作为字符串与前面的'0x'或你想要将它们转换为数字吗? – Deolus
我希望他们转换为数字,但作为十六进制值 – Karthik