如何直接将数字打印为字符串?
How can I print directly a number as a string?
printf("%s", 0x216f6c6c6548); // "Hello!" reversed
它应该打印 "Hello!" 但它没有。我期望相同的结果:
long long ll = 0x216f6c6c6548;
printf("%s", &ll);
或
printf("%s", "Hello!");
是否可以将数字打印为字符串?
更新
是否可以直接打印一个数字作为字符串?
您必须从数字中提取字符:
print_ull_as_str (unsigned long long ll)
{
while (ll != 0) { printf("%c", (char )(ll & 0xffu)); ll >>= 8; }
}
接受答案后
易于打印直接。使用复合文字来形成字符串。
#include <stdio.h>
#define SBprint(x) ((char [8+1]){ \
1ULL*x>>0 , 1ULL*x>> 8, 1ULL*x>>16, 1ULL*x>>24, \
1ULL*x>>32, 1ULL*x>>40, 1ULL*x>>48, 1ULL*x>>56, 0})
int main(void) {
printf("%s", SBprint(0x216f6c6c6548));
printf("%s", SBprint(0x65726120776F480A));
printf("%s", SBprint(0x0A3F756F7920));
}
输出
Hello!
How are you?
如果你的编译器使用小端,就更简单了。
#define SBprint(x) ((union {long long ll[2]; char s[sizeof(long long)+1]; }){ {x, 0} }).s
printf("%s", 0x216f6c6c6548); // "Hello!" reversed
它应该打印 "Hello!" 但它没有。我期望相同的结果:
long long ll = 0x216f6c6c6548;
printf("%s", &ll);
或
printf("%s", "Hello!");
是否可以将数字打印为字符串?
更新
是否可以直接打印一个数字作为字符串?
您必须从数字中提取字符:
print_ull_as_str (unsigned long long ll)
{
while (ll != 0) { printf("%c", (char )(ll & 0xffu)); ll >>= 8; }
}
接受答案后
易于打印直接。使用复合文字来形成字符串。
#include <stdio.h>
#define SBprint(x) ((char [8+1]){ \
1ULL*x>>0 , 1ULL*x>> 8, 1ULL*x>>16, 1ULL*x>>24, \
1ULL*x>>32, 1ULL*x>>40, 1ULL*x>>48, 1ULL*x>>56, 0})
int main(void) {
printf("%s", SBprint(0x216f6c6c6548));
printf("%s", SBprint(0x65726120776F480A));
printf("%s", SBprint(0x0A3F756F7920));
}
输出
Hello!
How are you?
如果你的编译器使用小端,就更简单了。
#define SBprint(x) ((union {long long ll[2]; char s[sizeof(long long)+1]; }){ {x, 0} }).s