1

我是一名 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}" />

视图模型类:

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创建一个包含二进制数据块的十六进制转储的字符串。我尝试在我的 WPF 应用程序中执行此操作,如下所示:

Data11 = BitConverter.ToString(buffer, 1);
Data12 = BitConverter.ToString((buffer + 4), 1);

尽管第一个语句似乎工作正常,但第二个语句会引发以下错误:

Operator '+' cannot be applied to operands of type 'byte[]' and 'int'

我怎样才能实现它?:)

4

1 回答 1

4

您可以使用接受起始索引和长度的BitConverter.ToString方法的重载。

Data12 = BitConverter.ToString(buffer, 4, 1);

这将获得缓冲区中的第 5 个字节。

如果您不使用BitConverter.ToString并且必须进行手动操作,则可以使用 LinqTakeSkip扩展方法。

编辑:

如果您只格式化缓冲区的 1 个字节,您可以这样做:

Data12 = buffer[4].ToString("X2");
于 2012-10-31T16:51:00.597 回答