作为从struct:Printf raw data to a fixed length hex output打印原始十六进制数据问题的一个特殊延续。
我有一个包含指向其他数据的指针的结构。有什么简单的方法可以将这个结构和指针的内容作为一个连续流中的原始十六进制值打印出来吗?当使用以下方法打印B的十六进制值时:
// @note not actually valid code
struct B myStruct;
struct A myOtherStruct;
myStruct.c = &myOtherStruct;
unsigned char * p = (unsigned char *)myStruct;
for(int i = 0; i < sizeof(struct B) + sizeof(struct A); i++) //
printf("%02x ", p[i]);我很自然地只能在myStruct.c上得到一个地址(因为这就是我想的)。
struct A
{
int a;
char b;
};
struct B
{
int a;
char b;
void * c; // usually a struct A, ignore type-safety for simplicity
};我尝试用struct B手动为malloc中的数据腾出空间,并复制struct A,但似乎没有做到这一点。主要是出于好奇。
发布于 2018-05-10 02:53:59
当您在struct B上循环并打印void * c时,您将打印指针的值(即内存地址)。
因此,要么将struct A直接嵌入到struct B (而不是指针)中;要么编写打印代码,以便它知道指针、取消引用并打印这些指针(您需要知道内存有多大--既然您说的是// usually a struct A,那么让我们假设程序知道;否则,您需要保留存在的内容;或者至少要保持它的大小)。
https://stackoverflow.com/questions/50264646
复制相似问题