逐字节打印出结构的值

Tri*_*Tri 1 c

基本上,我正在尝试将char数组转换为指向结构的指针,并逐字节地打印结构中的值.这是因为我正在处理的一些遗留代码使用宏来进行一些按位移位和屏蔽以在结构中的整数内改变4位,并且我试图找出宏是否按预期工作.不过,我已将我的问题压缩到这个玩具示例中 -

#include <stdio.h>
#include <stdint.h>

int main()
{
    struct student
    {
        int32_t hi;
        int8_t test
    };

    struct student p1 = {20, 20};

    for(int i = 0; i < sizeof(p1); i++)
    {
        printf("%c",((char*)&p1)[i]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,这会打印出两个字符(显示为包含0014的框),而不是其他任何字符.如果我将for循环更改为0到5(这大致是我期望的for循环的界限),我得到完全相同的输出.有没有办法做我想要的(即打印5个字符)?我知道有些角色只是空的空间,但我不明白我怎么没有说空的空间.

dbu*_*ush 5

您正在尝试将二进制值打印为字符.如何打印这些字符取决于您的控制台,但字节值0通常不会打印任何内容.

如果要查看字节值是什么,请将它们打印为十六进制数字:

printf("%02x ",((char*)&p1)[i]);
Run Code Online (Sandbox Code Playgroud)