2017-01-23 1 views
0

J'ai un tableau C++ unidimensionnel contenant les valeurs UInt8 - Je voudrais convertir ces valeurs et les placer dans un tableau 2D C# byte. Actuellement, mon code me donne des valeurs incorrectes. Voici mon code:Conversion de valeurs UInt8 C++ en tableau d'octets C#

IntPtr ptr = GetDataFromCPPSide();  

byte[,] data = new byte[dimension1, dimension2]; 
for(int i = 0; i < dimension1; i ++) 
{ 
    for(int j = 0; j < dimension2; j++) 
    { 
     data[i, j] = Marshal.ReadByte((IntPtr)(ptr.ToInt64() + j + i * dimension2) * 1)); 
    } 
} 

Maintenant, cela ne convertit correctement certaines valeurs. Je suis sûr que cela a quelque chose à voir avec la façon dont je convertis la valeur dans la boucle for. J'ai placé une vérification sur le côté C++ et les valeurs sont renvoyées correctement. Des idées?

+0

Lorsque vous avez affaire à un octet à quelque chose ou à des transformations vice versa *, pensez toujours à l'encodage. L'absence de cela est un grand drapeau rouge. – Tigran

+0

@Tigran Pourriez-vous élaborer? – Roka545

+0

Vous devez utiliser l'encodage lors de la conversion d'un flux d'octets en type de données. Est-ce Unicode? Utf-8? Autre chose ? Pas nécessaire * que * est votre problème, mais considérez cela de toute façon. C'est ce que c'est un commentaire et non une réponse. – Tigran

Répondre

0

utilisant:

pingdata[i, j] = (byte)Marshal.ReadByte((IntPtr)(ptr.ToInt64() + (i * d2 + j))); 

résolu le problème.