将大端转换为小端

编程入门 行业动态 更新时间:2024-10-27 15:19:15
本文介绍了将大端转换为小端的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

大家好, 我需要将大端整数转换为小端整数。 (我的实现中整数大小为4个字节) )。我想出了以下代码 。我需要你对此发表评论。请建议任何可以完成的 改进。 #include< stdio.h> int main(void) { int big = 0x12345678; int little; char * big_ptr =(char *)& ;大; char * little_ptr =(char *)& little; little_ptr [0] = big_ptr [3]; little_ptr [1] = big_ptr [2]; little_ptr [2] = big_ptr [1]; little_ptr [3] = big_ptr [0]; printf(大= 0x%x小= 0x%x \ n,大,小); }

Hi guys, I need to convert a big endian integer to little endian integer. (the integer is 4 bytes in size on my implementation). I came up with the following code. I need your comments on this. Please suggest any improvements that can be done. #include <stdio.h> int main(void) { int big = 0x12345678; int little; char *big_ptr = (char *)&big; char *little_ptr = (char *)&little; little_ptr[0] = big_ptr[3]; little_ptr[1] = big_ptr[2]; little_ptr[2] = big_ptr[1]; little_ptr[3] = big_ptr[0]; printf("big = 0x%x little = 0x%x\n",big,little); }

推荐答案

您好, 我需要将一个大端整数转换为小端整数。 (我的实现中整数大小为4个字节)。我想出了以下代码 。我需要你对此发表评论。请建议任何可以完成的 改进。 I need to convert a big endian integer to little endian integer. (the integer is 4 bytes in size on my implementation). I came up with the following code. I need your comments on this. Please suggest any improvements that can be done.

您可以使用''shift''与''和''运算符相结合来获得相同的 结果: / * *转换big -little endian和conversly *此函数假定sizeof(unsigned int)== 4 * / unsigned int endian_swap(unsigned int x) { return b $ b(x>> 24)| ((x>> 8)& 0x0000ff00)| ((x<< 8)& 0x00ff0000)| (x << 24); } 干杯, Loic。

You can use ''shift'' combined with ''and'' operator to get the same result: /* * convert big -little endian and conversly * this function assumes that sizeof(unsigned int) == 4 */ unsigned int endian_swap(unsigned int x) { return (x>>24) | ((x>>8) & 0x0000ff00) | ((x<<8) & 0x00ff0000) | (x<<24); } Cheers, Loic.

< ju ********** @ yahoo.co.inwrote in message news:11 ********************** @ 80g2000cwy.googlegro ups ... <ju**********@yahoo.co.inwrote in message news:11**********************@80g2000cwy.googlegro ups... 大家好, 我需要将大端整数转换为小端整数。 (整数大小为4字节)我的实施)。我想出了以下代码 。我需要你对此发表评论。请建议任何可以完成的 改进。 #include< stdio.h> int main(void) { int big = 0x12345678; int little; char * big_ptr =(char *)& ;大; char * little_ptr =(char *)& little; little_ptr [0] = big_ptr [3]; little_ptr [1] = big_ptr [2]; little_ptr [2] = big_ptr [1]; little_ptr [3] = big_ptr [0]; printf(大= 0x%x小= 0x%x \ n,大,小); } Hi guys, I need to convert a big endian integer to little endian integer. (the integer is 4 bytes in size on my implementation). I came up with the following code. I need your comments on this. Please suggest any improvements that can be done. #include <stdio.h> int main(void) { int big = 0x12345678; int little; char *big_ptr = (char *)&big; char *little_ptr = (char *)&little; little_ptr[0] = big_ptr[3]; little_ptr[1] = big_ptr[2]; little_ptr[2] = big_ptr[1]; little_ptr[3] = big_ptr[0]; printf("big = 0x%x little = 0x%x\n",big,little); }

上面的代码应该可以正常工作。然而,更传统的做法是使用工会,即 工会 { int i; char c [4]; } pickapart; pickapart.i = input_arg; output0 = pickapart.c [0]; 但是,如果你能找到一种只涉及转移的方法,并且如果要求 检查汇编语言表明编译器做得很好 (可能没有移位),这将是首选的方法,即 output0 = input_arg& ; 0xFF; output1 =(input_arg>> 8)& 0xFF; 等 那么这将是首选方法。如果int大小<32,那么你所引用的方法可以导致内存寻址问题,并且引用的方法我不会为其他工作整数的大小。应该是一个更便携和一般的方法 。

The code above should work fine. However, the more traditional approach is to use a union, i.e. union { int i; char c[4]; } pickapart; pickapart.i = input_arg; output0 = pickapart.c[0]; However, if you can find an approach involving shifting only, and if an examination of the assembly-language shows that the compiler does it well (probably without shifting), that would be the preferred approach, i.e. output0 = input_arg & 0xFF; output1 = (input_arg >>8) & 0xFF; etc. then that would be the preferred approach. The approach you cited can lead to memory addressing problems if the int size is <32, and the approach I cited with the union won''t work for other sizes of integers. There should be a more portable and general approach.

这里新增了,如果我没有遵循任何规则而道歉, 添加代码片段等。请告诉我。 Hi, New here, so apologies if I have not followed any rules while adding code snippets etc. Do let me know. endian_swap(unsigned int x) { 返回 (x>> 24)| ((x>> 8) & 0x0000ff00)| ((x << 8)& 0x00ff0000)| (x << 24); } 干杯, Loic。 endian_swap(unsigned int x) { return (x>>24) | ((x>>8) & 0x0000ff00) | ((x<<8) & 0x00ff0000) | (x<<24); } Cheers, Loic.

如果int是32位,那么以下代码对于无符号 int'有多好? int main(无效) { unsigned int x = 0xffaa2211; unsigned int z = 0; z =((x << 16)|(x> 16)); 返回0; }

If int is 32 bits, then how good is the following code for unsigned int''s? int main(void) { unsigned int x = 0xffaa2211; unsigned int z = 0; z = ( (x << 16) | ( x >16) ); return 0; }

更多推荐

将大端转换为小端

本文发布于:2023-07-29 19:38:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1243473.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:大端   转换为

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!