C# 十六进制数的检查条件
我在文本文件中写了一个十六进制数。我需要在if-else中检查十六进制数的条件。例如,写入文本文件的起始编号为1100,结束编号为10FF。起始编号1100是结束编号与1的相加。此增量过程由其他系统完成 在我的例子中,在读取文本文件中的数字后,系统将进入下一个进程 这是我的代码:C# 十六进制数的检查条件,c#,C#,我在文本文件中写了一个十六进制数。我需要在if-else中检查十六进制数的条件。例如,写入文本文件的起始编号为1100,结束编号为10FF。起始编号1100是结束编号与1的相加。此增量过程由其他系统完成 在我的例子中,在读取文本文件中的数字后,系统将进入下一个进程 这是我的代码: var data = File .ReadAllLines(Path) .Select(x => x.Split('='))
var data = File
.ReadAllLines(Path)
.Select(x => x.Split('='))
.Where(x => x.Length > 1)
.ToDictionary(x => x[0].Trim(), x => x[1]);
Console.WriteLine("Start: {0}", data["Start"]);
Console.WriteLine("End: {0}", data["End"]);
if (data["Start"] == data["End"]+1)
{
//it will proceed to next process
}
else
{
//prompt not meet end number
}
问题是,if(data[“Start”]==data[“End”]+1)
不起作用。我如何解决这个问题?是否需要先将十六进制数转换为int?在C#中,如果将字符串与数字串联,数字将转换为字符串并附加到原始字符串的末尾:
如果要对数字执行一些数学运算,首先需要将它们转换为正确的数据类型(在本例中为-integer)
为此,可以使用以下命令之一:
if(Convert.ToInt32(数据[“开始”],16)=Convert.ToInt32(数据[“结束”],16)+1)
或
if(int.Parse(数据[“开始”]、NumberStyles.HexNumber)==int.Parse(数据[“结束”]、NumberStyles.HexNumber)+1)
它们会将包含十六进制数的字符串转换为该数字的十进制表示形式,然后它将作为一个数字(例如,加法将按预期工作)。“10FF”
不是0x10FF
在c#中,字符串恰好包含可以解析为十六进制数字(或任何数字)的文本,这并不意味着它将被隐式转换为该数字。
事实上,另一种方法是在字符串和数字之间使用
+
运算符时-c将数字隐式转换为字符串-因此“10FF”+1
将产生“10FF1”
请注意,我在这一行中以“In c#”开头,因为其他语言可能不遵循相同的规则。例如,在T-SQL中,从varchar到int的隐式转换一直在发生,对于没有经验的开发人员来说,这是一个非常常见的“问题”
因此,您需要将字符串转换为整数,正如Lasse V.Karlsen在评论中所写的那样。
您可以使用Convert.ToInt32(string,16)
或者使用int.Parse(str,NumberStyles.HexNumber)
——如果您确定文本始终包含十六进制数的字符串表示形式
对于不确定的文本,最好使用
int.TryParse
以避免出现FormatException
——但请注意TryParse
返回bool
,int值通过out
参数返回:int.TryParse(str,NumberStyles.HexNumber,CultureInfo.InvariantCulture,out var val)
首先尝试将字符串转换回整数,使用Convert.ToInt32(data[“Start]”,16)
。尝试在中间窗口中运行“10FF”+1
。很高兴提供帮助:-)