无法将 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;
然后 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
已经是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
我正在将 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
已经是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