复制关于endianess的整数内容

 汇星创业网 发布于 2023-02-05 10:18

我想要做的事实上应该很简单,但我不知道如何以一种简单的方式实现它:

我想将无符号整数(32位)的值复制到无符号字符数组.数组中的表示必须始终为little endian.

在一个小端架构上我可以简单地做:

unsigned char array[sizeof(unsigned int)];
unsigned int i = 12345;
memcpy(array, &i, sizeof(unsigned int));

该表示将以小尾数表示.在大端架构上实现这一目标的最佳方法是什么?我如何在我的代码中找出我的架构的endianess?

我的项目使用C++ 11标准.

提前致谢!

1 个回答
  • 你不想"复制"内部表示 unsigned int; 您想将其格式化为指定的外部表示.这相对容易:

    *dest ++ = (i      ) & 0xFF;
    *dest ++ = (i >>  8) & 0xFF;
    *dest ++ = (i >> 16) & 0xFF;
    *dest ++ = (i >> 24) & 0xFF;
    

    也就是说,毕竟是32位小端表示的定义.

    有符号整数可能更复杂,因为负数有不同的表示,浮点更差.在许多情况下,放弃一些可移植性是可以接受的:如果您的机器使用其他格式(大多数大型机都是这种情况),写一个64位IEEE双重绝对是不平凡的.

    2023-02-05 10:21 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有