2010-06-02 22 views
9

Tôi đã thử phân tích một số bằng phương thức .NET Int64.Parse và sẽ không chấp nhận chuỗi như "0x3039", mặc dù đó là cách bạn viết hằng số trong C#. Tài liệu đặc biệt không cho phép chuỗi có tiền tố "0x" và dấu "h" có vẻ không hoạt động.Có thể bất kỳ phương thức nào của .NET Parse xử lý chuỗi hex có tiền tố "0x" không?

Để phân tích cú pháp số thập lục phân, tôi phải sử dụng tùy chọn System.Globalization.NumberStyles.HexNumber.

Nếu có ai đó biết chắc chắn rằng, Int64.Parse() không thể chấp nhận các chuỗi có tiền tố "0x", vui lòng cho tôi biết.

Trả lời

16

documentation cung cấp các biểu thức cho các định dạng số được hỗ trợ và không cho phép tiền tố cũng như hậu tố không được phép cho số thập lục phân.

Convert.ToInt32(String, Int32) hỗ trợ các tiền tố 0x0X khi sử dụng cơ sở 16.

+0

Cảm ơn bạn đã trả lời nhanh! Chỉ cần những gì tôi đang tìm kiếm. – Triynko

2

Không, nó sẽ không chấp nhận 0x. Thậm chí có một tùy chọn AllowHexSpecifier, nhưng vì một số lý do mà chỉ có nghĩa là các chữ số a-f và vẫn mong đợi bạn để dải của phần 0x.

+3

AllowHexSpecifier là cần thiết để có thể phân biệt giữa 1E3 là 483 trong hex và là 1000 với E cho thấy sự khởi đầu của số mũ. –

1

Xin lỗi vì câu trả lời muộn để một câu hỏi cũ, nhưng câu hỏi này là người đầu tiên mà đi lên trong tìm kiếm cho "[.net] 0x tiền tố" .

Có, có ít nhất một bộ hàm .NET chuẩn xử lý chính xác các chuỗi hex bắt đầu bằng tiền tố "0X".

Kể từ .NET framework 1.1, các lớp Int64Converter, Int32Converter, Int16Converter và ByteConverter trong không gian tên System.ComponentModel chấp nhận tiền tố thập lục phân 0X làm một phần của chuỗi.

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) 
{ 
} 

liên kết tài liệu MSDN: https://msdn.microsoft.com/en-us/library/system.componentmodel.int16converter(v=vs.71).aspx

Các vấn đề liên quan