首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

类型转换有关问题

2012-06-09 
类型转换问题长度短的数据类型转换为长的类型时比如char型(1字节)转换为short型(2字节)如何转换?多出的一

类型转换问题
长度短的数据类型转换为长的类型时
比如char型(1字节)转换为short型(2字节)
如何转换?
多出的一个字节加在什么位置?
高地址还是低地址?是否和大小端有关?
数据是0还是野数据?

菜鸟求教

[解决办法]
眼见为时,仿照CSAPP的一段代码。楼主跑跑就知道了。

C/C++ code
#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;

热点排行