[英]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.