无法将 int 转换为 byte

Can't convert int to byte

我正在将 Delphi 应用程序转换为 C#,我遇到了这个:

alength:=1; //alength is a byte
aa:=astring //astring is a string parameter passed into the function containing all this

alength:=strtoint(copy(aa,2,length(aa)-1));

因此 copy 从现有字符串的一部分创建一个字符串,字符串的第一个字符从索引 1 开始,而不是像其他语言那样 0。它使用这种格式:

function copy ( Source : string; StartChar, Count : Integer ) : string;

然后 strtointstring 转换为 int

对于那段代码的 C# 转换,我有:

alength = Convert.ToInt32(aa.Substring(1 ,aa.Length - 1));

这给了我错误 Error 131 Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?)

既然alength已经是byte类型了,我还以为不用强制转换呢?

您在分配字节时使用了 Convert.ToInt32()。请改用 Convert.ToByte()

更好的方法是使用 TryParse 来避免字符串无效时出现异常:

byte alength;
bool success = Byte.TryParse(aa.SubString(1,aa.Length - 1), out alength);

如果解析成功success为true,否则为false。 您可以根据转换是否成功来定义程序的流程:

byte alength;
if(Byte.TryParse(aa.SubString(1,aa.Length - 1), out alength))
{
   //Great success! continue program
}
else
{
   //Oops something went wrong! 
}

只需更改:

alength = Convert.ToInt32(aa.Substring(1 ,aa.Length - 1));

进入

alength = Convert.ToByte(aa.Substring(1 ,aa.Length - 1));

但这里更重要的问题是:aa字符串在原始用途中的取值范围是多少?是0-255吗?如果是,那么你可以简单地使用ToByte,但如果不是,那么你应该考虑使用其他数据类型。

像这样:

int alength = Convert.ToInt32(aa.Substring(1 ,aa.Length - 1)); //define as int

纯演员也可以。

我认为该字节最多大约有 255 种组合,因此:

byte i = int_variable & 0x000000FF;

将完全控制投射。

可以使用 0xFF 因为没有区别 & 0x000000FF == 0xFF