我是C ++开发人员,最近搬到了C#。现在我正在处理我的WPF应用程序中的文本框,我需要设置文本框的测试。这是代码:
XAML:
<TextBox Name="Data11" MaxLength="2" Grid.Column="0" Text="{Binding Data11}" />
<TextBox Name="Data12" MaxLength="2" Grid.Column="1" Text="{Binding Data12}" />
ViewModel类:
private string _Data11;
public string Data11
{
get
{
return _Data11;
}
set
{
_Data11 = value;
OnPropertyChanged("Data11");
}
}
// Description of Data12
private string _Data12;
public string Data12
{
get
{
return _Data12;
}
set
{
_Data12 = value;
OnPropertyChanged("Data12");
}
}
现在在这个文本框中我需要设置文本。基本上在我的C ++应用程序中,我按如下方式完成:
m_matchData11->setText(String(String::toHexString((buffer+0), 1)), false);
m_matchData12->setText(String(String::toHexString((buffer+1+4), 1)), false);
如果您注意到上述情况, ToHexString 创建一个包含二进制数据块的十六进制转储的字符串。我尝试在My WPF应用程序中执行此操作,如下所示:
Data11 = BitConverter.ToString(buffer, 1);
Data12 = BitConverter.ToString((buffer + 4), 1);
虽然第一个语句似乎工作正常,但第二个语句会引发以下错误:
Operator '+' cannot be applied to operands of type 'byte[]' and 'int'
我怎样才能实现它? :)
答案 0 :(得分:4)
您可以使用接受起始索引和长度的BitConverter.ToString方法的重载。
Data12 = BitConverter.ToString(buffer, 4, 1);
这将获得缓冲区中的第5个字节。
如果您没有使用BitConverter.ToString
并且必须进行手动操作,则可以使用Linq的Take
和Skip
扩展方法。
编辑:
如果您只是格式化缓冲区的1个字节,则可以改为:
Data12 = buffer[4].ToString("X2");