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