質問

クライアントまで、フルのC#を使用していBlowfish.NET 2.1.3のBlowfishECB.csファイルこちらから)

C++では、未知のものでsimiliar.

C++では、初期化(ふぐ)の手順は次の通りです:

void cBlowFish::Initialize(BYTE key[], int keybytes)

クライアントまで、フルのC#の初期化(ふぐ)の手順は同じです

public void Initialize(byte[] key, int ofs, int len) 

この問題:

これはどのようにキーが初期化されたC++

DWORD keyArray[2] = {0}; //declaration
...some code
blowfish.Initialize((LPBYTE)keyArray, 8);

したがって、キーが配列のDWORDSである8バイト。

クライアントまで、フルのC#ることをここに宣言しますのでそんな感じですがエラ

BlowfishECB blowfish = new BlowfishECB();
UInt32[] keyarray = new UInt32[2];
..some code
blowfish.Initialize(keyarray, 0, 8);

のエラー:

引数は'1':変換できないから'uint[]'を'byte[]'

なぜですか?

感謝。

役に立ちましたか?

解決

あなたはUInt32型からバイトを取得するために BitConverter に使用することができます。

<時間>

これを行うには、ループ内の各要素を変換する必要があります。私のような何かを考えます:

private byte[] ConvertFromUInt32Array(UInt32[] array)
{
    List<byte> results = new List<byte>();
    foreach(UInt32 value in array)
    {
        byte[] converted = BitConverter.GetBytes(value);
        results.AddRange(converted);
    }
    return results.ToArray();
}

戻るには:

private UInt32[] ConvertFromByteArray(byte[] array)
{
    List<UInt32> results = new List<UInt32>();
    for(int i=0;i<array.Length;i += 4)
    {
        byte[] temp = new byte[4];
        for (int j=0;j<4;++j)
            temp[j] = array[i+j];
        results.Add(BitConverter.ToUInt32(temp);
    }
    return results.ToArray();
}

他のヒント

ご利用の場合VS2008またはC#で3.5以下をお試しくださいLINQ+BitConverter液

var converted = 
  keyArray
    .Select(x => BitConverter.GetBytes(x))
    .SelectMany(x => x)
    .ToArray();

ブレダ

  • の選択に変換す毎UInt32をbyte[].の結果はIEnumerable<byte[]>
  • のSelectMany話flattesはIEnumerable<byte[]> にIEnumerable<byte>
  • ToArray()単に変換するenumerable配列に

編集 非LINQ解決するというだけでなく

List<byte> list = new List<byte>();
foreach ( UInt32 k in keyArray) {
  list.AddRange(BitConverter.GetBytes(k));
}
return list.ToArray();

が必要な場合は、 高速 に換された値型が使用できhackかに記載の回答: 何がインターネットには想像もつかなに変換するfloat[]へのbyte[]?

このハッキングを避けるメモリの割当ておよび繰.これまでよりも速やかに異なるビューの配列O(1)です。

もちろんだける場合に使用性能は問題な早期の最適化。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top