通过强制转换为char*并使用";%打印十六进制整数s";在斯普林特

通过强制转换为char*并使用";%打印十六进制整数s";在斯普林特,c,string,embedded,C,String,Embedded,我正在读取两个32位寄存器,并尝试使用以下命令将其放入字符串缓冲区中: sprintf (buffer, "%s-%s", ((char*)(in32(REGISTER1))) , (char*)(in32(REGISTER2))); 从寄存器读入的十六进制值是否可以不作为指向字符的指针进行类型转换,并如上所述打印到缓冲区中?sprintf(缓冲区,“%08x-%08x”,寄存器1,寄存器2) --假设您希望寄存器地址在缓冲区中。如果您打算读取寄存器的内容,请进行相应调整。但关键是,您不能简单

我正在读取两个32位寄存器,并尝试使用以下命令将其放入字符串缓冲区中:

sprintf (buffer, "%s-%s", ((char*)(in32(REGISTER1))) , (char*)(in32(REGISTER2)));
从寄存器读入的十六进制值是否可以不作为指向字符的指针进行类型转换,并如上所述打印到缓冲区中?

sprintf(缓冲区,“%08x-%08x”,寄存器1,寄存器2)
--假设您希望寄存器地址在缓冲区中。如果您打算读取寄存器的内容,请进行相应调整。但关键是,您不能简单地将数字称为char*并从中获取数字,但
sprintf()
(以及所有类似printf的函数)可以为您转换值基 --假设您希望寄存器地址在缓冲区中。如果您打算读取寄存器的内容,请进行相应调整。但关键是,您不能简单地将数字称为char*并从中获取数字,但是
sprintf()
(以及所有类似printf的函数)可以为您转换值基。

正如上面的一条评论所暗示的,这个短语很可能存在问题:

从寄存器读入的十六进制值

我怀疑你读的是十六进制值;相反,你读的是一个整数。如果要在字符串中存储该整数的十六进制表示形式,请使用
%X
格式说明符:

sprintf (buffer, "%08X-%08X", in32(REGISTER1), in32(REGISTER2));
8
表示“使用八个字符的宽度”;
0
表示“如果该值小于八个字符,则使用带零的左键盘”。)

可以有效转换为
char*
的唯一方法是,寄存器中的整数值实际上是指向存储字符串的某个内存位置的指针;但这里的情况显然不是这样。

正如上面的评论所暗示的,问题很可能出在这句话上:

从寄存器读入的十六进制值

我怀疑你读的是十六进制值;相反,你读的是一个整数。如果要在字符串中存储该整数的十六进制表示形式,请使用
%X
格式说明符:

sprintf (buffer, "%08X-%08X", in32(REGISTER1), in32(REGISTER2));
8
表示“使用八个字符的宽度”;
0
表示“如果该值小于八个字符,则使用带零的左键盘”。)


可以有效转换为
char*
的唯一方法是,寄存器中的整数值实际上是指向存储字符串的某个内存位置的指针;但这里的情况显然不是这样。

正如其他答案所建议的,您可以使用
使用
%X
将整数转换为字符串十六进制表示形式
但是,由于您没有说明您使用的编译器或整数或long的长度,因此可能会得到意外的结果。
在一个16位控制器上,
sprintf(缓冲区,%08X-%08X),in32(寄存器1),in32(寄存器2))将失败

这应该适用于大多数平台,因为sprintf假定长值作为参数,并且参数总是转换为长值

sprintf (buffer, "%08lX-%08lX", (long)in32(REGISTER1), (long)in32(REGISTER2));

正如其他答案所建议的,您可以使用
%X
将整数转换为字符串十六进制表示形式
sprintf
但是,由于您没有说明您使用的编译器或整数或long的长度,因此可能会得到意外的结果。
在一个16位控制器上,
sprintf(缓冲区,%08X-%08X),in32(寄存器1),in32(寄存器2))将失败

这应该适用于大多数平台,因为sprintf假定长值作为参数,并且参数总是转换为长值

sprintf (buffer, "%08lX-%08lX", (long)in32(REGISTER1), (long)in32(REGISTER2));

in32()的返回类型是什么?如果是32位整数,请不要强制转换为char*,并使用“%x-%x”作为格式字符串(或“%08x-%08x”),您应该尝试想出一个比“为什么这不起作用?”更好的标题。我试着想出一个,但我对低级C的理解还不够。in32()的返回类型是什么?如果是32位整数,请不要强制转换为char*,并使用“%x-%x”作为格式字符串(或“%08x-%08x”),您应该尝试想出一个比“为什么这不起作用?”更好的标题。我试着想出一个,但我对低级C的理解还不够。