【发布时间】:2020-08-06 08:07:20
【问题描述】:
我有一个长值,我想将其转换为 6 位十六进制字符串。
我的尝试:
long ID = some value;
char * hex = (char *) calloc(n, sizeof(char)); // dynamic memory required.
int c = sprintf(hex, n+1, "%x", ID);
assert(c == ID);
1) 我怎样才能找到'n' 的值给calloc?
2) 如何使字符串只有 6 个十六进制字符?
谢谢。
【问题讨论】:
-
1.您可以使用 sizeof(long) 获取 long 变量的大小。 2. 不确定为什么需要将字符串设为 6 个十六进制字符? 3.使用char指针指向long变量时,需要考虑endian。
-
写入字符串时限制缓冲区大小的打印函数是
snprintf,而不是sprintf。传递n作为第二个参数,而不是n + 1。snprintf和类似函数的返回值是已写入的字符数,或者如果缓冲区足够大则将要写入的字符数。如果您只想填充一个十六进制字符串,以便少于 6 位的数字在开头有零,例如000ff7,使用"%06lx"。更大的数字仍然会被写入并需要更大的缓冲区。 -
long可以保存的值是从LONG_MIN到LONG_MAX。检查LONG_MIN需要多少个字符并将其用作最大值:int mxlng = snprintf(0, 0, "%lx", LONG_MIN);
标签: c char hex data-conversion