将decimal转换为char / string

时间:2013-01-23 09:19:21

标签: c string char decimal

假设我有这个号码

int x = 65535;

以下是小数表示:

  

YY

我知道如何从单个字符

中做到这一点
#include <stdio.h>

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

但这只会给我“ÿ”

我想这样做而不使用任何外部库,最好使用C类型字符串。

4 个答案:

答案 0 :(得分: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&amp; 0xff = 0xff)
  • f >> = 8将值向右移8位,0xffff变为0x00ff('ff'右侧消失
  • f > 0f == 0xff现在
  • 以来属实

下一个循环是相同的,但是f >>= 8将0x00ff移到右边=&gt; 0x0000,f为空。 因此f > 0条件错误,循环结束。

答案 1 :(得分:2)

您正在寻找的是位屏蔽:(x >> 8) & 0xFF 高位字节,低位(x & 0xFF)。 (其实, 如果int有32位,则高位为(x >> 24) & 0xFF 字节。但鉴于价值观,以及你所说的期望, 你可能想要第二个字节,而不是高阶字节。)

答案 2 :(得分:1)

你拥有的是一个16位(两个字节)的无符号数。 char是8位(一个字节)。这意味着您必须提取数字中的两个字节,以将它们作为单独的字符。

这是通过按位运算符完成的。您可以使用按位和&以及按位移位>>来完成此操作。

答案 3 :(得分:1)

这样的东西
char buffer[9];
long value = 65535;
char *cur = buffer;
while (value > 0)
{
    *cur++ = value % 0x100;
    value /= 0x100;
}
*cur = 0;