无法将int转换为byte

时间:2016-02-19 13:05:13

标签: c# int substring byte delphi-7

我正在将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已经是类型字节,我不认为我必须抛出它?

4 个答案:

答案 0 :(得分:2)

当您分配字节时,您正在使用private void initComponents() { contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new GridBagLayout()); // 7 rows and 2 cols setContentPane(contentPane); GridBagConstraints constraints = new GridBagConstraints(); constraints.anchor=GridBagConstraints.NORTHWEST; constraints.weightx=0.5; constraints.weighty=0.5; ArrayList<JLabel> jlabels = new ArrayList<JLabel>(); ArrayList<JTextField> textFields = new ArrayList<JTextField>(); // for (int a = 0; a < product.list.size(); a++) { for (int a = 0; a < 7.; a++) { // let say 7 for example JLabel jLabel = new javax.swing.JLabel("New Label"); constraints.gridx=0; constraints.gridy=a; jlabels.add(jLabel); JTextField jTextField = new javax.swing.JTextField(10); textFields.add(jTextField); contentPane.add(jLabel, constraints); constraints.gridx=1; contentPane.add(jTextField, constraints); } pack(); } 。请改用Convert.ToInt32()

更好的方法是使用Convert.ToByte()来避免在字符串无效时出现异常:

TryParse

如果解析成功byte alength; bool success = Byte.TryParse(aa.SubString(1,aa.Length - 1), out alength); 将为真,否则为false。 您可以根据转换是否成功来定义程序流程:

success

答案 1 :(得分:1)

简单地改变:

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

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

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

这样的事情:

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

答案 2 :(得分:0)

纯粹演员也可以。

字节大约是我认为的最多255种组合,所以:

byte i = int_variable & 0x000000FF;

将完全控制演员。

答案 3 :(得分:-2)

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