2012-07-30 236 views
-4

im將uint32_t十六進制數轉換爲uint32_t BCD編號。並會做同樣的UINT64十六進制BCD ...如何將uint32轉換爲C中的uint64?

我有這個從

uint16_t CvtBcd(uint16_t HexNumber) 
{ 
    return ((HexNumber/ 10) << 4) | (HexNumber% 10); 
} 

編輯UINT16:

我打算用它作爲外部代碼中使用爲更大的節目。

// Converts a uint32_t hex number into uint32_t BCD number. 
extern uint32_t Cvt32Bcd(uint32_t HexNumber) 
{ 
    return ((HexNumber/10) << 8 | (HexNumber % 10)); 
} 
+3

在你的問題中的方式很多縮寫。我會說只是'uint64_t bla = uint64_t(some_uint32_t);'但是我收集你想要的東西。 – rubenvb 2012-07-30 12:15:24

+0

我不明白你的功能試圖做什麼。我無法想象它的工作原理,因爲轉換爲BCD時的大16位數字變得更寬。它們甚至不適合16位。 – ArjunShankar 2012-07-30 12:21:17

+0

我相信OP指的是[binary-coded decimals](http://en.wikipedia.org/wiki/Binary-coded_decimal)。 – 2012-07-30 12:24:46

回答

2

在二進制編碼的十進制表示,則需要每十進制數字4位,因此可以不是全部(無符號)的整數轉換爲相同的大小的BCD表示法,通常需要爲一個更大的類型。忽略這個問題,一種算法,可將任何大小的BCD表示的無符號整數

uintN_t convert_to_BCD(uintN_t n) { 
    uintN_t bcd = 0; 
    int shift = 0; 
    while(n) { 
     bcd |= (n % 10) << shift; 
     n /= 10; 
     shift += 4; 
    } 
    return bcd; 
} 

爲了避免溢出,使返回類型比參數類型較大,但這並不爲最大可用工作輸入類型,當然。然後您可以使用數組unsigned char來保存數字,或者使用包含兩個uintN_t的結構來保存結果。