Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Convert.ToUInt16 (String, Int32)

 

Data di pubblicazione: novembre 2016

Converte la rappresentazione di stringa di un numero in una base specificata nell'intero senza segno a 16 bit equivalente.

Questa API non è conforme a CLS.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
	string value,
	int fromBase
)

Parametri

value
Type: System.String

Stringa che contiene il numero da convertire.

fromBase
Type: System.Int32

Base del numero in value, che deve essere 2, 8, 10 o 16.

Valore restituito

Type: System.UInt16

Intero senza segno a 16 bit equivalente al numero in value oppure 0 (zero) se value è null.

Exception Condition
ArgumentException

Il valore di fromBase non è 2, 8, 10 o 16.

-oppure-

value, che rappresenta un numero senza segno non in base 10, è preceduto da un segno negativo.

ArgumentOutOfRangeException

value è String.Empty.

FormatException

value contiene un carattere che corrisponde a una cifra non valida nella base specificata da fromBase. Il messaggio di eccezione indica che non ci sono cifre da convertire se il primo carattere in value non è valido; in caso contrario, il messaggio indica che value contiene caratteri finali non validi.

OverflowException

value, che rappresenta un numero senza segno non in base 10, è preceduto da un segno negativo.

-oppure-

L'oggetto value rappresenta un numero minore di UInt16.MinValue o maggiore di UInt16.MaxValue.

Se fromBase è 16, è possibile anteporre al numero specificato per il value parametro con "0x" o "0x".

Poiché il UInt16 tipo di dati supporta solo valori senza segno il ToUInt16(String, Int32) metodo presuppone che value sia espresso utilizzando una rappresentazione binaria senza segno. In altre parole, tutti i 16 bit vengono utilizzati per rappresentare il valore numerico e il bit di segno è assente. Di conseguenza, è possibile scrivere codice in cui intero con segno a un valore che non rientra nell'intervallo consentito di UInt16 tipo di dati viene convertito in un UInt16 valore senza il metodo generi un'eccezione. L'esempio seguente converte Int16.MinValue per la rappresentazione di stringa esadecimale e quindi chiama il ToUInt16(String, Int32) metodo. Anziché generare un'eccezione, il metodo visualizza il messaggio "0x8000 viene convertito in 32768".

// Create a hexadecimal value out of range of the UInt16 type.
string value = Convert.ToString(Int16.MinValue, 16);
// Convert it back to a number.
try
{
   UInt16 number = Convert.ToUInt16(value, 16);
   Console.WriteLine("0x{0} converts to {1}.", value, number);
}   
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned short integer.", 
                     value);
}   

Quando si eseguono operazioni binarie o conversioni numeriche, è sempre responsabilità dello sviluppatore per verificare che un metodo o un operatore viene utilizzata la rappresentazione numerica appropriata per interpretare un valore specifico. Nell'esempio seguente viene illustrata una tecnica per garantire che il metodo utilizza in modo inappropriato rappresentazione binaria per interpretare un valore che utilizza la rappresentazione in complemento a due, quando si converte una stringa esadecimale a un UInt16 valore. L'esempio determina se un valore rappresenta un signed o un intero senza segno mentre converte tale valore nella relativa rappresentazione di stringa. Quando l'esempio converte il valore in un UInt16 valore, viene verificato se il valore originale era un intero con segno. In tal caso e se è impostato il bit più significativo (che indica che il valore originale è stato negativo), il metodo genera un'eccezione.

// Create a negative hexadecimal value out of range of the UInt16 type.
short sourceNumber = Int16.MinValue;
bool isSigned = Math.Sign((short)sourceNumber.GetType().GetField("MinValue").GetValue(null)) == -1;
string value = Convert.ToString(sourceNumber, 16);
UInt16 targetNumber;
try
{
   targetNumber = Convert.ToUInt16(value, 16);
   if (isSigned && ((targetNumber & 0x8000) != 0))
      throw new OverflowException();
   else 
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned short integer.", value);
} 
// Displays the following to the console:
//    Unable to convert '0x8000' to an unsigned short integer.     

Nell'esempio seguente tenta di interpretare ogni elemento in una matrice di stringhe numeriche come valore esadecimale e di convertirlo in un intero senza segno a 16 bit.

using System;

public class Example
{
   public static void Main()
   {
      string[] hexStrings = { "8000", "0FFF", "f000", "00A30", "D", "-13", 
                              "9AC61", "GAD" };
      foreach (string hexString in hexStrings)
      {
         try {
            ushort number = Convert.ToUInt16(hexString, 16);
            Console.WriteLine("Converted '{0}' to {1:N0}.", hexString, number);
         }
         catch (FormatException) {
            Console.WriteLine("'{0}' is not in the correct format for a hexadecimal number.", 
                              hexString);
         }
         catch (OverflowException) {
            Console.WriteLine("'{0}' is outside the range of an Int16.", hexString);
         }
         catch (ArgumentException) {
            Console.WriteLine("'{0}' is invalid in base 16.", hexString);
         }
      }                                            
   }
}
// The example displays the following output:
//    Converted '8000' to 32,768.
//    Converted '0FFF' to 4,095.
//    Converted 'f000' to 61,440.
//    Converted '00A30' to 2,608.
//    Converted 'D' to 13.
//    '-13' is invalid in base 16.
//    '9AC61' is outside the range of an Int16.
//    'GAD' is not in the correct format for a hexadecimal number.

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: