无法将 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;
然后strtoint
将string
转换为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
已经是类型字节,我认为我不必强制转换它吗?
在分配字节时,您使用的是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