C++ではできるのに、C#ではできないのは奇妙なことです。
明確にするために、2 つの関数を C++ に貼り付けてから C# に貼り付け、C# コードの問題のある行にコメント「//error」を付けます。2 つの関数が行うことは、パラメーターをエンコードしてから、それを byte1seeds という名前のグローバル変数に追加することです。
これらはC++の関数です
//Global var:
unsigned char byte1seeds[3];
unsigned long GenerateValue( unsigned long * Ptr )
{
unsigned long val = *Ptr;
for( int i = 0; i < 32; i++ )
val = (((((((((((val >> 2)^val) >> 2)^val) >> 1)^val) >> 1)^val) >> 1)^val)&1)|((((val&1) << 31)|(val >> 1))&0xFFFFFFFE);
return ( *Ptr = val );
}
void SetupCountByte( unsigned long seed )
{
if( seed == 0 ) seed = 0x9ABFB3B6;
unsigned long mut = seed;
unsigned long mut1 = GenerateValue( &mut );
unsigned long mut2 = GenerateValue( &mut );
unsigned long mut3 = GenerateValue( &mut );
GenerateValue( &mut );
unsigned char byte1 = (mut&0xFF)^(mut3&0xFF);
unsigned char byte2 = (mut1&0xFF)^(mut2&0xFF);
if( !byte1 ) byte1 = 1;
if( !byte2 ) byte2 = 1;
byte1seeds[0] = byte1^byte2;
byte1seeds[1] = byte2;
byte1seeds[2] = byte1;
}
今C#コード:
関数 GenerateValue を変更しました。パラメーターとしてポインターを持つ代わりに、ulong パラメーターがあります。
それを呼び出して両方の値を変更するには、次を使用します。
- ulong mut1 = GenerateValue(mut);
- mut = mut1;
翻訳された関数は次のとおりです (問題のある行は「//エラー」でマークされています)。
//Global var:
public static byte[] byte1seeds = new byte[3];
public static ulong GenerateValue(ulong val)
{
for( int i = 0; i < 32; i++ )
val = (((((((((((val >> 2)^val) >> 2)^val) >> 1)^val) >> 1)^val) >> 1)^val)&1)|((((val&1) << 31)|(val >> 1))&0xFFFFFFFE);
return val ;
}
public static void SetupCountByte( uint seed )
{
if( seed == 0 ) seed = 0x9ABFB3B6;
ulong mut = seed;
ulong mut1 = GenerateValue(mut);
mut = mut1;
ulong mut2 = GenerateValue(mut);
mut = mut2;
ulong mut3 = GenerateValue(mut);
mut = mut3;
mut = GenerateValue(mut);
byte byte1 = (mut & 0xFF) ^ (mut3 & 0xFF); //error
byte byte2 = (mut1 & 0xFF) ^ (mut2 & 0xFF); //error
if( byte1 != 0 )
byte1 = 1;
if( byte2 != 0 )
byte2 = 1;
byte1seeds[0] = byte1^byte2; //error
byte1seeds[1] = byte2;
byte1seeds[2] = byte1;
}
エラーは次のとおりです。
タイプ 'ulong' を 'byte' に暗黙的に変換することはできません。明示的な変換が存在します (キャストがありませんか?)
編集:問題のある3行目のエラーは次のとおりです:
タイプ 'int' を 'byte' に暗黙的に変換することはできません。明示的な変換が存在します (キャストがありませんか?)
ここで質問があります: これらのエラーを解決するにはどうすればよいですか?
前もって感謝します!