如何在C中将2字节整数转换为2个不同的字符?
我想转换一个unsigned int并将其分成2个字符。 例如:如果整数为1,则其二进制表示forms为0000 0001.我希望0000部分在一个char变量中,0001部分在另一个二进制变量中。 我如何在C中实现这一目标?
如果你坚持你有sizeof(int)==2
那么:
unsigned int x = (unsigned int)2; //or any other value it happens to be unsigned char high = (unsigned char)(x>>8); unsigned char low = x & 0xff;
如果总共有8位(一个字节),则将其分成两个4位值:
unsigned char x=2;// or whatever unsigned char high = (x>>4); unsigned char low = x & 0xf;
移动并屏蔽掉您想要的部分数字。 无符号整数可能是四个字节,如果你想要所有四个字节,你只需要移动16和24来获得更高阶的字节。
unsigned char low = myuint & 0xff; unsigned char high = (myuint >> 8) & 0xff;
假设16位整数检查sizeof !! 在我的平台上,int是32位,所以我将在这个代码示例中使用short。 Mine在拉开指针方面赢得了最令人厌恶的奖项 – 但它也是我最清楚的理解。
unsigned short number = 1; unsigned char a; a = *((unsigned char*)(&number)); // Grab char from first byte of the pointer to the int unsigned char b; b = *((unsigned char*)(&number) + 1); // Offset one byte from the pointer and grab second char
一种有效的方法如下:
typedef union { unsigned char c[sizeof(int)]; int i; } intchar__t; intchar__t x; xi = 2;
现在xc [](一个数组)将整数引用为一系列字符,尽管你会遇到字节字符串问题。 可以使用适合您正在编程的平台的#define值来解决这些问题。 这与Justin Meiners提供的答案类似,但有点清洁。
unsigned short s = 0xFFEE; unsigned char b1 = (s >> 8)&0xFF; unsigned char b2 = (((s << 8)>> 8) & 0xFF);
最简单的我能想到的。
int i = 1 // 2 Byte integer value 0x0001 unsigned char byteLow = (i & 0x00FF); unsinged char byteHigh = ((i & 0xFF00) >> 8);
byteLow中的值为0x01 , byteHigh中的值为0x00