Tag: byte

如何使用htonl将little endian转换为big endian

我有以下元素的结构。 此外,结构是完美填充。 typedef struct { uint16_t a; uint16_t b; uint8_t c; uint8_t d; uint8_t e[6]; } ad; 这个结构是一个小端。 我的意思是当我在我的大端机器上打印这个结构时,我得到以下内容 如果c = 1,则d = 2,e [0] = 3,e [1] = 4。 我明白了 c = 4,d = 3,e [0] = 2且e [1] = 1。 a和b被交换。 此外,e [1]与c交换,e [0]与d交换。 我正在使用如下的htonl函数。 但是,它不起作用,任何人都可以建议我一个很好的答案。

printf太聪明了从char到int?

为什么以下电话: printf(“%d %d”, ‘a’, ‘b’); 导致“正确” 97 98值? %d表示函数必须读取4个字节的数据,而printf不能告诉接收到的参数的类型(格式字符串除外),为什么不打印数字|a||b||junk||junk| ? 提前致谢。

什么是C / C ++中的“字节”

例如,这是fread的参考: size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); 读取一个count元素数组,每个元素的大小为“size bytes”…那么有多少BITS会读取一个fread(&x, 1, 1, stream) ? 八或CHAR_BIT ?

如果在int之后出现char,为什么要添加填充?

例如,有一种结构 struct A { char a; int i; }; 在这种情况下,我们有[1字节] +填充[3字节] + int [4字节] = 8。 现在让我们对上面的struct进行一些更新, struct A { int i; char a; }; 在这种情况下,char来自int并且不需要添加填充字节,这意味着sizeof(A)= 5字节,但在这种情况下我也得到8字节的结果。 为什么? 好的,这个案子怎么样 struct s { int b; double c; char a; }; 根据下面给出的逻辑,有一个: size = b[4 bytes] + padding[4 bytes] + c[8] + a[1] + padding[7 bytes to […]