Domanda

Esiste qualcosa di simile a sprintf () in C #?

Ad esempio, vorrei convertire un numero intero in un array di byte a 2 byte.

Qualcosa del tipo:

int number = 17;
byte[] s = sprintf("%2c", number);
È stato utile?

Soluzione 3

Si è scoperto che quello che volevo davvero era questo:

short number = 17;
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(number);
writer.Flush();

La chiave qui è la funzione di scrittura della classe BinaryWriter. Ha 18 sovraccarichi, convertendo diversi formati in un array di byte che scrive nel flusso. Nel mio caso devo assicurarmi che il numero che voglio scrivere sia mantenuto in un breve tipo di dati, questo farà scrivere 2 byte alla funzione Write.

Altri suggerimenti

string s = string.Format("{0:00}", number)

Il primo 0 significa "primo argomento" (cioè numero); lo 00 dopo i due punti è l'identificatore di formato (2 cifre numeriche).

Tuttavia, tieni presente che le stringhe .NET sono UTF-16, quindi una stringa di 2 caratteri è 4 byte, non 2

(modifica: domanda modificata da stringa a byte [] )

Per ottenere i byte, utilizzare Encoding :

byte[] raw = Encoding.UTF8.GetBytes(s);

(ovviamente codifiche diverse possono dare risultati diversi; UTF8 fornirà 2 byte per questi dati)

In realtà, una versione più breve del primo bit è:

string s = number.ToString("00");

Ma la versione string.Format è più flessibile.

EDIT: suppongo che tu voglia convertire il valore di un numero intero in un array di byte e non il valore convertito prima in una stringa e poi in un array di byte (controlla la risposta di Marc per quest'ultimo).

Per convertire un int in un array di byte è possibile utilizzare:

byte[] array = BitConverter.GetBytes(17);

ma questo ti darà una matrice di 4 byte e non 2 (poiché un int è 32 bit). Per ottenere un array di 2 byte è necessario utilizzare:

byte[] array = BitConverter.GetBytes((short)17);

Se vuoi solo convertire il valore 17 in due caratteri, usa:

string result = string.Format("{0:00}", 17);

Ma, come ha sottolineato Marc, il risultato consumerà 4 byte poiché ogni carattere in .NET è di 2 byte (UTF-16) (inclusi i due byte che contengono la lunghezza della stringa sarà di 6 byte).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top