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}" />

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は、バイナリ データのブロックの 16 進ダンプを含む文字列を作成します。次のように My WPF アプリでこれを試しました。

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

最初のステートメントは正常に動作しているように見えますが、2 番目のステートメントは次のエラーをスローします。

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しておらず、手動操作を行う必要がある場合は、LinqTakeおよびSkip拡張メソッドを使用できます。

編集:

バッファの1バイトのみをフォーマットしている場合は、代わりにこれを実行できる可能性があります。

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