繁体   English   中英

将十进制转换为char / string

[英]Convert decimal to char/string

假设我有这个号码

int x = 65535;

这是以下内容的十进制表示形式:

ÿÿ

我知道如何从单个字符中做到这一点

#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变为0x00ff('ff'右侧消失了
  • f > 0为真,因为现在f == 0xff

下一个循环是相同的,但是f >>= 8将0x00ff向右移动=> 0x0000,并且f为空。 因此, f > 0条件是错误的,循环结束。

您正在寻找的是位掩码: (x >> 8) & 0xFF为高位字节, (x & 0xFF)为低位字节。 (实际上,如果int有32位,则高位字节为(x >> 24) & 0xFF 。但是给定值和您所期望的值,您可能想要第二个字节,而不是高位字节。 )

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

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

就像是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM