无法将 int 转换为字节

本文关键字:字节 转换 int | 更新日期: 2023-09-27 18:35:18

我正在将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已经是类型字节,我认为我不必强制转换它吗?

无法将 int 转换为字节

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

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

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

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

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