比方說,我有這個數轉換小數爲char /串
int x = 65535;
這是十進制表示:
YY
我知道我可以做到這一點單個字符
#include <stdio.h>
int main() {
int f = 65535;
printf("%c", f);
}
但是這隻會給我「ÿ」
我想這樣做,而不使用任何外部庫,並最好使用C類型的字符串。
比方說,我有這個數轉換小數爲char /串
int x = 65535;
這是十進制表示:
YY
我知道我可以做到這一點單個字符
#include <stdio.h>
int main() {
int f = 65535;
printf("%c", f);
}
但是這隻會給我「ÿ」
我想這樣做,而不使用任何外部庫,並最好使用C類型的字符串。
#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
條件是錯誤的,循環結束。
這將與他的具體價值,但不是一般。 (例如,如果'x> 65535',會發生什麼? –
呃..我需要更大的值,任何想法? –
重寫的答案(與'f = 0一起工作;'以及) –
你要找的是位屏蔽:(x >> 8) & 0xFF
爲 高位字節,而(x & 0xFF)
爲低位。 (實際上, 如果int
有32位,這是(x >> 24) & 0xFF
的高階 字節。但給出的值,你說你的期待, 你可能想第二個字節,而不是高位字節的內容。)
你有什麼是一個16位(兩個字節)的無符號數字。 A char
是8位(一個字節)。這意味着您必須提取數字中的兩個字節才能將它們作爲單獨的字符。
這是用位運算符完成的。您可以使用按位和&
和按位移>>
來完成該操作。
喜歡的東西
char buffer[9];
long value = 65535;
char *cur = buffer;
while (value > 0)
{
*cur++ = value % 0x100;
value /= 0x100;
}
*cur = 0;
對不起。但是這是什麼?你能解釋一下嗎? – Krishnabhadra
我也不明白,但顯然它工作@ _ @ –
'比方說,我有這個數 INT X = 65535; 這是十進制表示形式: ÿÿ' wat? – Eregrith
我可能解釋錯了,ÿÿ是65535,因爲「49」是「1」。由於ÿ是十進制的255,因此Latin是(255 * 256)+255 = 65535 –
Latin在Latin-1或Windows-1252中爲255。 –