2013-01-23 50 views
1

比方說,我有這個數轉換小數爲char /串

int x = 65535; 

這是十進制表示:

YY

我知道我可以做到這一點單個字符

#include <stdio.h> 

int main() { 
    int f = 65535; 
    printf("%c", f); 
} 

但是這隻會給我「ÿ」

我想這樣做,而不使用任何外部庫,並最好使用C類型的字符串。

+6

'比方說,我有這個數 INT X = 65535; 這是十進制表示形式: ÿÿ' wat? – Eregrith

+0

我可能解釋錯了,ÿÿ是65535,因爲「49」是「1」。由於ÿ是十進制的255,因此Latin是(255 * 256)+255 = 65535 –

+2

Latin在Latin-1或Windows-1252中爲255。 –

回答

2
#include <stdio.h> 

int main() { 
    unsigned f = 65535; // initial value 

    // this will do the printf and ff >>= 8 until f <= 0 (=0 actually) 
    do { 
     printf("%c", f & 0xff); // print once char. The &0xff keeps only the bits for one byte (8 bits) 
     f >>= 8; // shifts f right side for 8 bits 
    } while (f > 0); 
} 

考慮以十六進制的值65535,或爲0xFFFF,表示它的正值佔用2個字節是0xFF和0xff的

  • f & 0xff打印僅保持8 LSb的,(0xFFFF的& 0xff的= 0xff的)
  • f >> = 8值8位向右移動,變爲爲0xFFFF設爲$ 00FF(該「FF」右側都消失了
  • f > 0爲真,因爲現在f == 0xff

下一個循環是一樣的,但是f >>= 8將0x00ff移到右邊=> 0x0000,並且f是空的。 因此f > 0條件是錯誤的,循環結束。

+0

這將與他的具體價值,但不是一般。 (例如,如果'x> 65535',會發生什麼? –

+0

呃..我需要更大的值,任何想法? –

+1

重寫的答案(與'f = 0一起工作;'以及) –

2

你要找的是位屏蔽:(x >> 8) & 0xFF爲 高位字節,而(x & 0xFF)爲低位。 (實際上, 如果int有32位,這是(x >> 24) & 0xFF的高階 字節。但給出的值,你說你的期待, 你可能想第二個字節,而不是高位字節的內容。)

1

你有什麼是一個16位(兩個字節)的無符號數字。 A char是8位(一個字節)。這意味着您必須提取數字中的兩個字節才能將它們作爲單獨的字符。

這是用位運算符完成的。您可以使用按位和&和按位移>>來完成該操作。

1

喜歡的東西

char buffer[9]; 
long value = 65535; 
char *cur = buffer; 
while (value > 0) 
{ 
    *cur++ = value % 0x100; 
    value /= 0x100; 
} 
*cur = 0; 
+1

對不起。但是這是什麼?你能解釋一下嗎? – Krishnabhadra

+0

我也不明白,但顯然它工作@ _ @ –