Press "Enter" to skip to content

C# Conversioni dati che passione

Ieri ho bloggato una nota per alcune conversioni poco frequenti che ho dovuto fare a causa di una routine di checksum che ho scritto per  Alberto.
Oggi ho scoperto che la mia ottimistica versione era largamente superata dal meccanismo reale del calcolo del checksum, per riuscire a riprodurre il quale ho dovuto effettuare una serie di stranezze che vi listo di seguito nel caso abbiate la “fortuna” (poca) di scontrarvi con qualcosa di simile.

Leggere un sub-array da un byte array
byte[] sourceArray;
... //Qui mettete i bytes nell’array leggendo un file o una seriale
byte[] destArray = new byte[desiredSublength]
Array.Copy(sourceArray, StartIndex, destArray, DestStartIndex, Length);
Conversione dei bytes nei corrispondenti caratteri ascii
char[] chars = System.Text.Encoding.UTF8.GetChars(destArray);
Far diventare una porzione dell’array di caratteri una string
string subValue = new string(charsArray, startIndex, length);
Convertire la stringa rappresentante un numero esadecimale in un byte
byte myHexByte = Convert.ToByte("1C", 16);
Convertire un byte in una stringa rappresentante il numero in esadecimale
string hexString = Convert.ToString(myByteValue, 16);
Fate attenzione che la stringa sia correttamente upper o lower case
string lowerHex = hexString.ToLower();
string upperHex = hexString.ToUpper();

Questo perché db e DB sono lo stesso numero ma cambiano completamente se convertite la stringa in un char array

char[] hexLetters = upperHex.ToCharArray();

e poi  convertite il char array in un byte array

byte[] bytesFromHexLetters = new byte[hexLetters.Length];
for (int i = 0; i < hexLetters.Length; i++)
{
   bytesFromHexLetters [i] = Convert.ToByte(chars[i]);
}

Provate con le lettere esadecimali in upper e lower case e ve ne accorgete, e se mi chiedete, ma tutto in una routine di calcolo del checksum? 😛  qui lo chiamiamo Ufficio Complicazione Affari Semplici, sembra essere spesso molto affollato.