1

標準の16進文字列(「0x0123」など)をC#でBigIntegerに変換する慣用的な方法は何ですか?

私が試したのは、16進プレフィックスを手動で削除する必要があります。

using System;
using System.Numerics;
using System.Globalization;

namespace TestHex
{
    class Program
    {
        static void Main(string[] args)
        {
            BigInteger A;
// it does not work
//            A = BigInteger.Parse("0x0123");
// it works, but without hex prefix
            A = BigInteger.Parse("123", NumberStyles.AllowHexSpecifier);
            Console.WriteLine(A);
            Console.ReadLine();
        }
    }
}
4

1 に答える 1

4

MSDNのドキュメントによると、イディオムは、入力として使用せずに16進文字列のみを受け入れることですが、接頭辞:0xを付けて出力することでユーザーに嘘をつきます。0x

public class Example
{
    public static void Main()
    {
        string[] hexStrings = { "80", "E293", "F9A2FF", "FFFFFFFF", 
                                "080", "0E293", "0F9A2FF", "0FFFFFFFF",  
                                "0080", "00E293", "00F9A2FF", "00FFFFFFFF" };
        foreach (string hexString in hexStrings)
        {
            BigInteger number = BigInteger.Parse(
                hexString,
                NumberStyles.AllowHexSpecifier);
            Console.WriteLine("Converted 0x{0} to {1}.", hexString, number);
        }         
    }
}
// The example displays the following output: 
//       Converted 0x80 to -128. 
//       Converted 0xE293 to -7533. 
//       Converted 0xF9A2FF to -417025. 
//       Converted 0xFFFFFFFF to -1. 
//       Converted 0x080 to 128. 
//       Converted 0x0E293 to 58003. 
//       Converted 0x0F9A2FF to 16360191. 
//       Converted 0x0FFFFFFFF to 4294967295. 
//       Converted 0x0080 to 128. 
//       Converted 0x00E293 to 58003. 
//       Converted 0x00F9A2FF to 16360191. 
//       Converted 0x00FFFFFFFF to 4294967295.

それは本当にごみのイディオムです。私はあなたのユースケースに合うあなた自身のイディオムを発明したいと思います。

于 2012-10-30T12:00:24.623 に答える