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.ToSByte (String, Int32)

 

Data di pubblicazione: ottobre 2016

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

Questa API non è conforme a CLS.

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

[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
	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.SByte

Intero con segno a 8 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 con 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 con segno non in base 10, è preceduto da un segno negativo.

-oppure-

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

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

Poiché il segno negativo non è supportato per rappresentazioni numeriche non in base 10, il ToSByte(String, Int32) metodo presuppone che i numeri negativi utilizzano la rappresentazione in complemento a due. In altre parole, il metodo interpreta sempre il bit più significativo di un byte (7 bit) come bit di segno. Di conseguenza, è possibile scrivere codice in cui una non in base 10 del numero che non rientra nell'intervallo consentito di SByte tipo di dati viene convertito in un SByte valore senza il metodo generi un'eccezione. L'esempio seguente converte MaxValue per la rappresentazione di stringa esadecimale e quindi chiama il ToSByte(String, Int32) metodo. Anziché generare un'eccezione, il metodo visualizza il messaggio "0xFF viene convertito in -1".

// Create a hexadecimal value out of range of the SByte type.
string value = Convert.ToString(byte.MaxValue, 16);
// Convert it back to a number.
try
{
   sbyte number = Convert.ToSByte(value, 16);
   Console.WriteLine("0x{0} converts to {1}.", value, number);
}   
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to a signed byte.", value);
}   

Quando si eseguono operazioni binarie o conversioni numeriche, è sempre responsabilità dello sviluppatore per verificare che un metodo viene utilizzata la rappresentazione numerica appropriata per interpretare un valore specifico. Come illustrato nell'esempio seguente, è possibile assicurarsi che il metodo gestisca gli overflow accuratamente determinando innanzitutto se un valore rappresenta un unsigned o un tipo con segno durante la conversione nella relativa rappresentazione di stringa esadecimale. Generare un'eccezione se il valore originale è un tipo unsigned, ma la conversione in un byte con segno produce un valore il cui bit di segno è attivo.

// Create a hexadecimal value out of range of the SByte type.
byte sourceNumber = byte.MaxValue;
bool isSigned = Math.Sign(Convert.ToDouble(sourceNumber.GetType().GetField("MinValue").GetValue(null))) == -1;
string value = Convert.ToString(sourceNumber, 16);
sbyte targetNumber;
try
{
   targetNumber = Convert.ToSByte(value, 16);
   if (! isSigned && ((targetNumber & 0x80) != 0))
      throw new OverflowException();
   else 
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to a signed byte.", value);
} 
// Displays the following to the console:
//    Unable to convert '0xff' to a signed byte.     

Nell'esempio seguente tenta di interpretare gli elementi in una matrice di stringhe in formato binario, ottale e la rappresentazione esadecimale di valori numerici per convertirli in byte senza segno.

using System;

public class Example
{
   public static void Main()
   {
      int[] baseValues = { 2, 8, 16};
      string[] values = { "FF", "81", "03", "11", "8F", "01", "1C", "111", 
                          "123", "18A" }; 

      // Convert to each supported base.
      foreach (int baseValue in baseValues)
      {
         Console.WriteLine("Converting strings in base {0}:", baseValue);
         foreach (string value in values)
         {
            Console.Write("   '{0,-5}  -->  ", value + "'");
            try {
               Console.WriteLine(Convert.ToSByte(value, baseValue));
            }   
            catch (FormatException) {
               Console.WriteLine("Bad Format");
            }   
            catch (OverflowException) {
               Console.WriteLine("Out of Range");
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       Converting strings in base 2:
//          'FF'    -->  Bad Format
//          '81'    -->  Bad Format
//          '03'    -->  Bad Format
//          '11'    -->  3
//          '8F'    -->  Bad Format
//          '01'    -->  1
//          '1C'    -->  Bad Format
//          '111'   -->  7
//          '123'   -->  Bad Format
//          '18A'   -->  Bad Format
//       
//       Converting strings in base 8:
//          'FF'    -->  Bad Format
//          '81'    -->  Bad Format
//          '03'    -->  3
//          '11'    -->  9
//          '8F'    -->  Bad Format
//          '01'    -->  1
//          '1C'    -->  Bad Format
//          '111'   -->  73
//          '123'   -->  83
//          '18A'   -->  Bad Format
//       
//       Converting strings in base 16:
//          'FF'    -->  -1
//          '81'    -->  -127
//          '03'    -->  3
//          '11'    -->  17
//          '8F'    -->  -113
//          '01'    -->  1
//          '1C'    -->  28
//          '111'   -->  Out of Range
//          '123'   -->  Out of Range
//          '18A'   -->  Out of Range

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: