类型转换问题
长度短的数据类型转换为长的类型时
比如char型(1字节)转换为short型(2字节)
如何转换?
多出的一个字节加在什么位置?
高地址还是低地址?是否和大小端有关?
数据是0还是野数据?
菜鸟求教
[解决办法]
眼见为时,仿照CSAPP的一段代码。楼主跑跑就知道了。
#include <stdio.h>typedef unsigned char *byte_pointer;void show_bytes(byte_pointer start, int len) { int i; for (i = 0; i < len; i++) printf(" %.2x", start[i]); printf("\n");}void show_char_short() { char x = 123; short mx = x; show_bytes((byte_pointer) &x, sizeof(char)); show_bytes((byte_pointer) &mx, sizeof(short)); }int main(int argc, char *argv[]){ show_char_short(); return 0;}
[解决办法]
扯淡。
两种方式:
1,字节序相关,原先位置内存需足够2字节,打印short是什么取决于机器大小端与(&ch)[1]的值有关。
char ch = 1;
short *l = (short*)&ch;
2, 字节序无关,按照纸面二进制向高位扩宽填充0, 1字节存在哪一个字节与大小端有关, 打印一定是1.
char ch = 1;
short s = (short)ch;