【问题标题】:Split hex representation of an integer and save it in a string拆分整数的十六进制表示并将其保存在字符串中
【发布时间】:2017-12-02 21:59:17
【问题描述】:

我正在尝试将变量的十六进制值拆分为字符串。为此,我使用sprintf。但我收到一个错误:Segmentation fault (core dumped)

下面是我试过的代码:

#include <stdio.h>
#include <string.h>

int main() {

char* t1;
char* t2;

int n = 0x23A;

sprintf(t1, "%X", n & 0xFF);
printf("t1 is : %s\n",t1);


sprintf(t2, "%X", (n >> 8) & 0xFF);
printf("t2 is : %s\n",t2);

return 0 ;
} 

例如我想将0x23A 拆分为0x020x3A 我使用两个字符串,因为我的想法是最后将它们连接起来形成一个带有023A 的字符串。

有没有其他方法可以得到这个输出然后请告诉我。

【问题讨论】:

  • 我不确定你为什么要“拆分”它,而你所要做的就是例如printf("%04X", n)
  • 您需要为t1指向的写入分配空间。
  • 另外,我建议您将指针实际 point 某处。或者改用数组。请记住为字符串终止符分配一个额外的字符。
  • 您正在写入未分配的 t1 和 t2 并指向某个随机地址,导致段错误。
  • @Someprogrammerdude 感谢您的帮助,您提供的解决方案对我有用。

标签: c split hex printf


【解决方案1】:

你正在使用一个未初始化的指针,它给出了未定义的行为。

只需使用一个字符数组,这样字符串就有一些空间:

char t1[16];

sprintf(t1, "%X", n & ff);
printf("t1 is '%s'\n", t1);

这应该打印3A

【讨论】:

  • 感谢您的回答。同样正如其中一位 cmets 所建议的那样,如果我们使用printf("%04X", n),那么也不需要拆分值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 2013-04-28
  • 1970-01-01
相关资源
最近更新 更多