2 Stimmen

C#: Konvertierung von ulong nach byte nicht möglich

Seltsam, dass ich das in C++ tun kann, aber nicht in C#.

Um es klar zu machen, werde ich die beiden Funktionen in C++ und dann in C# einfügen und die problematischen Zeilen im C#-Code mit einem Kommentar "//error" markieren. Die beiden Funktionen kodieren den Parameter und fügen ihn dann in eine globale Variable namens byte1seeds ein.

Dies sind die Funktionen in 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;
}

Nun der C#-Code:

Ich habe die Funktion GenerateValue geändert: Statt eines Zeigers als Parameter hat sie nun einen Long-Parameter.

Um es aufzurufen und beide Werte zu ändern, verwende ich:

  1. ulong mut1 = GenerateValue(mut);
  2. mut = mut1;

Hier sind die übersetzten Funktionen (die problematischen Zeilen sind mit "//error" gekennzeichnet);

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

Der Fehler ist:

Der Typ 'ulong' kann nicht implizit in 'byte' konvertiert werden. Es gibt eine explizite Konvertierung (fehlt ein Cast?)

edit:der Fehler in der problematischen Zeile 3 ist:

Der Typ 'int' kann nicht implizit in 'byte' konvertiert werden. Es gibt eine explizite Konvertierung (fehlt ein Cast?)

Hier stellt sich die Frage: Wie kann man diese Fehler beheben?

Vielen Dank im Voraus!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X