System.Convert.ToByte 方法 (String, Int32)

方法描述

将指定基的数字的字符串表示形式转换为等效的 8 位无符号整数。

语法定义(C# System.Convert.ToByte 方法 (String, Int32) 的用法)

public static byte ToByte(
	string value,
	int fromBase
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
value System-String 包含要转换的数字的字符串。
fromBase System-Int32 value 中数字的基数,它必须是 2、8、10 或 16。
返回值 System.Byte 与 value 中数字等效的 8 位无符号整数,如果 value 为 null,则为 0(零)。

提示和注释

如果 fromBase 为 16,则可以在 value 参数指定的数字前面加上“0x”或“0X”。

由于 Byte 数据类型仅支持无符号值,因此 ToByte(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。 换句话说,所有八位数字都用于表示数值,因而缺少一个符号位。 因此,可以编写代码以将超出 Byte 数据类型的范围的有符号字节值转换为 Byte 值,从而不让该方法引发异常。 下面的示例将 MinValue 转换为对应的十六进制字符串表示形式,然后调用 ToByte(String, Int32) 方法。 该方法将显示消息“0x80 converts to 128”(0x80 转换为 128),而不是引发异常。

C#

VB

复制

// Create a hexadecimal value out of range of the Byte type.

string value = SByte.MinValue.ToString("X");

// Convert it back to a number.

try

{

byte number = Convert.ToByte(value, 16);

Console.WriteLine("0x{0} converts to {1}.", value, number);

}

catch (OverflowException)

{

Console.WriteLine("Unable to convert '0x{0}' to a byte.", value);

}

在执行二元运算或数值转换时,开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。 下面的示例演示了一种技巧,此技巧可确保在将十六进制字符串表示形式转换为 Byte 值时,所用的方法不会错误地使用无符号二进制表示形式。 该示例在将一个值转换为对应的字符串表示形式时,确定该值是表示一个有符号整数还是一个无符号整数。 在此示例将该值转换回 Byte 值时,它将检查原始值是否为一个有符号整数。 如果原始值是有符号整数并且其高序位已被设置(这表明该值是一个负值,并且使用的是 2 的补数而不是无符号二进制表示形式),则此方法将引发异常。

C#

VB

复制

// Create a negative hexadecimal value out of range of the Byte type.

sbyte sourceNumber = SByte.MinValue;

bool isSigned = Math.Sign((sbyte)sourceNumber.GetType().GetField("MinValue").GetValue(null)) == -1;

string value = sourceNumber.ToString("X");

byte targetNumber;

try

{

targetNumber = Convert.ToByte(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 an unsigned byte.", value);

}

// Displays the following to the console:

// Unable to convert '0x80' to an unsigned byte.

System.Convert.ToByte 方法 (String, Int32)例子

下面的示例交替尝试将字符串数组解释为二进制、八进制、十进制和十六进制值的表示形式。

using System;

public class Example
{
   public static void Main()
   {
      int[] bases = { 2, 8, 10, 16 };
      string[] values = { "-1", "1", "08", "0F", "11" , "12", "30",                
                          "101", "255", "FF", "10000000", "80" };
      byte number;
      foreach (int numBase in bases)
      {
         Console.WriteLine("Base {0}:", numBase);
         foreach (string value in values)
         {
            try {
               number = Convert.ToByte(value, numBase);
               Console.WriteLine("   Converted '{0}' to {1}.", value, number);
            }   
            catch (FormatException) {
               Console.WriteLine("   '{0}' is not in the correct format for a base {1} byte value.", 
                                 value, numBase);
            }                     
            catch (OverflowException) {
               Console.WriteLine("   '{0}' is outside the range of the Byte type.", value);
            }   
            catch (ArgumentException) {
               Console.WriteLine("   '{0}' is invalid in base {1}.", value, numBase);
            }
         }                                 
      } 
   }
}
// The example displays the following output:
//    Base 2:
//       '-1' is invalid in base 2.
//       Converted '1' to 1.
//       '08' is not in the correct format for a base 2 conversion.
//       '0F' is not in the correct format for a base 2 conversion.
//       Converted '11' to 3.
//       '12' is not in the correct format for a base 2 conversion.
//       '30' is not in the correct format for a base 2 conversion.
//       Converted '101' to 5.
//       '255' is not in the correct format for a base 2 conversion.
//       'FF' is not in the correct format for a base 2 conversion.
//       Converted '10000000' to 128.
//       '80' is not in the correct format for a base 2 conversion.
//    Base 8:
//       '-1' is invalid in base 8.
//       Converted '1' to 1.
//       '08' is not in the correct format for a base 8 conversion.
//       '0F' is not in the correct format for a base 8 conversion.
//       Converted '11' to 9.
//       Converted '12' to 10.
//       Converted '30' to 24.
//       Converted '101' to 65.
//       Converted '255' to 173.
//       'FF' is not in the correct format for a base 8 conversion.
//       '10000000' is outside the range of the Byte type.
//       '80' is not in the correct format for a base 8 conversion.
//    Base 10:
//       '-1' is outside the range of the Byte type.
//       Converted '1' to 1.
//       Converted '08' to 8.
//       '0F' is not in the correct format for a base 10 conversion.
//       Converted '11' to 11.
//       Converted '12' to 12.
//       Converted '30' to 30.
//       Converted '101' to 101.
//       Converted '255' to 255.
//       'FF' is not in the correct format for a base 10 conversion.
//       '10000000' is outside the range of the Byte type.
//       Converted '80' to 80.
//    Base 16:
//       '-1' is invalid in base 16.
//       Converted '1' to 1.
//       Converted '08' to 8.
//       Converted '0F' to 15.
//       Converted '11' to 17.
//       Converted '12' to 18.
//       Converted '30' to 48.
//       '101' is outside the range of the Byte type.
//       '255' is outside the range of the Byte type.
//       Converted 'FF' to 255.
//       '10000000' is outside the range of the Byte type.
//       Converted '80' to 128.

异常

异常 异常描述
ArgumentException
  • fromBase 不是 2、8、10 或 16。
  • value,它表示一个非 10 为基的无符号数,前面带一个负号。
FormatException value 包含的一个字符不是 fromBase 指定的基中的有效数字。 如果 value 中的第一个字符无效,异常消息则指示没有可转换的数字;否则,该消息将指示 value 包含无效的尾随字符。
OverflowException
  • value,它表示一个 10 为基的无符号数,前面带一个负号。
  • value 表示小于 Byte.MinValue 或大于 Byte.MaxValue 的数字。

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1 受以下版本支持:

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。