我尝试使用.NET Int64.Parse方法解析数字,并且它不接受像“0x3039”这样的字符串,即使这是你在C#中编写常量的方式。该文档特别禁止字符串具有“0x”前缀,并且尾随“h”似乎也不起作用。
要解析十六进制数字,我必须使用System.Globalization.NumberStyles.HexNumber
选项。
如果有人知道,Int64.Parse()
无法接受带有“0x”前缀的字符串,请告知我们。
答案 0 :(得分:17)
documentation给出了支持的数字格式的表达式,因此十六进制数字不允许使用前缀和后缀。
使用基数为16时, Convert.ToInt32(String, Int32)
支持前缀0x
和0X
。
答案 1 :(得分:2)
不,它不会接受0x。甚至有一个AllowHexSpecifier选项,但由于某种原因,这只是意味着a-f数字,仍然希望你剥离0x部分。
答案 2 :(得分:2)
很抱歉对一个旧问题的回答很晚,但这个问题是第一个出现在搜索" [.net] 0x前缀"。
的问题。是的,至少有一组标准.NET函数可以正确处理以" 0X"开头的十六进制字符串。前缀。
从.NET framework 1.1开始,System.ComponentModel命名空间中的Int64Converter,Int32Converter,Int16Converter和ByteConverter类接受0X十六进制前缀作为字符串的一部分。
try
{
// get integer value of strValue
// assuming strValue has already been converted to uppercase e.g. by ToUpper()
int intValue;
if (strValue.StartsWith("0X"))
{
// support 0x hex prefix
intValue = (Int16)new System.ComponentModel.Int16Converter().ConvertFromString(strValue);
}
else
{
// decimal
intValue = int.Parse(strValue);
}
}
catch (FormatException)
{
}
MSDN文档链接: https://msdn.microsoft.com/en-us/library/system.componentmodel.int16converter(v=vs.71).aspx