は、私がC#の符号なしcharポインタ? C#2にC++からいくつかのコードを変換の途中で
unsigned char *p = m_pRecvBuffer + 5;
unsigned int noncelen1 = *p * 256 + p[1];
どのように私はC#のにこれを翻訳しない、これを見つけましたか? m_pRecvBuffer
はchar配列ですが、バイト配列として格納します。
は、私がC#の符号なしcharポインタ? C#2にC++からいくつかのコードを変換の途中で
unsigned char *p = m_pRecvBuffer + 5;
unsigned int noncelen1 = *p * 256 + p[1];
どのように私はC#のにこれを翻訳しない、これを見つけましたか? m_pRecvBuffer
はchar配列ですが、バイト配列として格納します。
byte[] p = new byte[m_pRecvBuffer.Length - 5];
Array.Copy(m_precvBuffer, p, m_pRecvBuffer.Length - 5);
uint noncelen1 = p[0] * 256 + p[1];
に似何かしかし、その場合には、私はあなたが実際には配列のコピーを使用する必要はないと思います。ちょうど
uint noncelen1 = p[5] * 256 + p[6];
で十分でしょう。
Hmm私は、このコードではリファクタリングが必要なのだろうかと思います。はい、pointers in C#を使用できます。しかし、そのスニペットに基づいてより良い選択肢があるかもしれません。入ってくるストリームの一部を読み込もうとしているようです。たぶんC#のstream libraryはあなたのコードのこの部分でうまくいくでしょうか?
コードは実際に何を行い、コードを分析するのではなく、動作を変換します。 unsafe
メソッドとポインタ演算をC#で使うことができますが、これはおそらく解決するよりも多くの問題を引き起こします。
はい、私はこれを認識しています。しかし、私はC++よりもC#をよく知っているので、与えられたコードをデバッグすることはできません。私の頭をこの周りで包み込むための第一歩は、C#で動作させることです。 –
ああ大丈夫です。私にとっても同じ問題ですが、配列索引作成という考えがありましたが、私は指を置くことができませんでした。 – Femaref
[] RecvBufferは、バイトとして宣言されていると仮定すると、あなたはこのようなものだろう:
int noncelen1 = RecvBuffer[5] * 256 + RecvBuffer[6];
私はすでに書いたコードに似ているので、私はこのルートを行った。 –
@hokkaido:このような新しいバイト配列を宣言してデータをコピーする場合、これは私が投稿した答えよりはるかに効率が悪いです。メモリを割り当てたり、配列をコピーしたりする理由はありません。 –
@ジョナサン、私は同じことを言います。しかし、コードの残りの部分がどのように見えるかはわかりません。おそらくポインタを取得してそこから読み始め、おそらくそれを配列+オフセットにリファクタリングすることが実現できないことがあるかもしれません。 OPの小さなコードスニペットから、それを伝えるのは難しいです。 – Joey