Utilizzare questo metodo.
public static byte[] ToBcd(int value){
if(value<0 || value>99999999)
throw new ArgumentOutOfRangeException("value");
byte[] ret=new byte[4];
for(int i=0;i<4;i++){
ret[i]=(byte)(value%10);
value/=10;
ret[i]|=(byte)((value%10)<<4);
value/=10;
}
return ret;
}
Questo è essenzialmente il modo in cui funziona.
- Se il valore è minore di 0 o maggiore di 99999999, il valore non si adatta a quattro byte. Più formalmente, se il valore è inferiore a 0 o è 10^(n * 2) o superiore, dove n è il numero di byte, il valore non si adatta a n byte.
- Per ogni byte:
- Impostare quel byte sul resto del valore diviso per 10 sul byte. (Questo metterà l'ultima cifra nel nibble basso [mezzo byte] del byte corrente.)
- dividere il valore di 10.
- Aggiungere 16 volte il resto del valore-divisa-by-10 alla byte. (. Questo metterà l'ormai ultima cifra nel nibble alto del byte corrente)
- dividere il valore per 10.
(Uno ottimizzazione è quello di impostare ogni byte a 0 in anticipo - che viene implicitamente eseguito da .NET quando assegna un nuovo array e interrompe l'iterazione quando il valore raggiunge 0. Quest'ultima ottimizzazione non viene eseguita nel codice sopra, per semplicità. Inoltre, se disponibile, alcuni compilatori o assemblatori offrono un divide/remainder routine che consente di recuperare il quoziente e il resto in un passo divisione, un'ottimizzazione che di solito non è necessaria.)
fonte
2011-08-18 12:33:35
Suppongo tu intenda "0x29}"? –
Non so di alcun supporto BCD in lib, la tua migliore scommessa è una funzione personalizzata che usa ToString come intermedio. –
Sì, dovrebbe essere 0x29 scusa .. – Kingpin