请问这种共用体怎么计算?(语言-c++)

请问这种共用体怎么计算?(语言-c++)
这种题,一直弄不懂,只会一些很简单的,教教我这种题

img

结果包含了不可见的字符0x00
这个程序在不同平台,结果不同
x86是little-endian,所以共用体内容
作为字节数组是 0x39 0x00 0x38 0x00
作为整数就是0x00380039
作为short是 0x3900 0x3800

#include <stdio.h>
#include <stdlib.h>

int main()
{
    union
    {
        short i[2];
        long k;
        char c[4];
    } r, *s=&r;
    s->i[0]=0x39;
    s->i[1]=0x38;
    printf("%c %c %c %c %lx",s->c[0],s->c[1],s->c[2],s->c[3],s->k);   
    return 0;
}

img