以下代码打印ffffffffff
。
我需要输出为16位长000000ffffffffff
,前导零。 var1
和var2
变量可能不同,因此我不需要仅填充6个零。我只需要输出带有前导零的16位数字。我该怎么办?
#include <stdio.h>
int main() {
int var1 = 1048575;
int var2 = 1048575;
char buffer[100];
sprintf(buffer, "%x%x", var1, var2);
printf("%s\n", buffer);
return 0;
}
答案 0 :(得分:1)
你可以分两步完成:
#include <stdio.h>
int main(void) {
int var1 = 1048575;
int var2 = 1048575;
int length = 0;
char buffer[100];
char paddedbuffer[100] = "000000000000000";
length = sprintf (buffer, "%x%x", var1, var2);
char* here = length < 16 ? paddedbuffer + 16 - length : paddedbuffer;
sprintf(here, "%s", buffer);
printf("%s\n", paddedbuffer);
return 0;
}
在某处可能有更优雅的解决方案。
另一种可能性是将结果转换为具有字段宽度的整数和sprintf
,或者首先计算最右边数字的实际数字。
答案 1 :(得分:1)
$email = $_POST["email"];
$name = $_POST["name"]);
$comments = $_POST["comments"];
$categories = $_POST["category_list"]; //the problem is here
答案 2 :(得分:1)
这是一个没有中间缓冲区的简单解决方案:
#include <stdio.h>
int main(void) {
int var1 = 1048575;
int var2 = 1048575;
printf("%0*x%x\n", 16 - snprintf(NULL, 0, "%x", var2), var1, var2);
return 0;
}
有一种特殊情况,您可能想要定义精确的行为:如果var2 == 0
怎么办?上面的代码将打印一个尾随0
。如果您只想打印有效数字,因此零值没有数字,您可以这样修改语句:
printf("%0*x%x\n", 16 - snprintf(NULL, 0, "%.x", var2), var1, var2);
一个小差异:在.
和%
之间添加x
,以指定0
的精确字段,指定最小位数为无。
答案 3 :(得分:0)
您还可以执行一些小的微积分来计算有效位数,然后打印所需的前导零数,因为log_base_ 16(var)是以十六进制表示的var的大小:
#include <stdio.h>
#include <math.h>
int main ()
{
int var1 = 1048575;
int var2 = 1048575;
int padd = 16 - ceil(log(var1)/log(16))-ceil(log(var2)/log(16));
char buffer [100];
sprintf (buffer, "%0*x%x%x", padd, 0, var1, var2);
printf("%s\n", buffer);
return 0;
}
答案 4 :(得分:0)
使用 tmp 缓冲区和'0'
s的字符串(char数组)的另一个轻微转折:
#include <stdio.h>
#include <string.h>
enum { PADLN = 16, MAXC = 17 };
int main (void)
{
int var1=1048575;
int var2=1048575;
char tmp [MAXC];
char buffer [MAXC];
char zeros[] = "0000000000000000";
size_t len = 0;
sprintf (tmp, "%x%x", var1, var2);
len = strlen(tmp);
zeros[PADLN - (len < PADLN ? len : PADLN)] = 0;
sprintf (buffer, "%s%s", zeros, tmp);
printf ("\n buffer : '%s'\n\n", buffer);
return 0;
}
<强>输出强>
$ ./bin/pad16
buffer : '000000ffffffffff'
答案 5 :(得分:0)
打印 Dim contentHeight As Integer = ChAm * 50 + 40
Dim scrollBarArea As Integer = 490
Dim viewableRatio As Double = scrollBarArea / contentHeight
Dim thumbHeight As Double = scrollBarArea * viewableRatio
Dim scrollTrackSpace As Integer = contentHeight - scrollBarArea
Dim scrollThumbSpace As Double = scrollBarArea - thumbHeight
Dim scrollJump As Double = scrollTrackSpace / scrollThumbSpace
,然后打印连接
var2