- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个程序,我只是将一个字节数组复制到一个 long long 数组中。总共有 20 个字节,所以我只需要一个 long long 的 3。我将字节复制到一个 long long 的原因是为了使其在 64 位系统上可移植。
我现在只需要在填充该数组之前进行字节交换,这样进入它的值就会反转。
有一个 byteswap.h,它具有我认为可以使用的 _int64 bswap_64(_int64) 函数。鉴于我的 long long 数组,我希望在使用该函数方面得到一些帮助。我会只是简单地传入 long long 的名称并将其读出到另一个 long long 数组中吗?我使用的是 C++ 而不是 .net 或 C#
更新:显然有些问题我仍然感到困惑。例如,使用恰好填充了 160 位十六进制字符串然后必须以十进制形式输出的字节数组让我想到了如果我只是对一个长(4 字节)数组进行简单赋值的情况担心会结束。然后我发现这段代码可以在 64 位 sun box 上运行。然后我认为,由于从一个环境到另一个环境的数据大小可以改变,所以一个简单的分配不会削减它。这让我想到只使用 long long 来使代码不受大小问题的影响。但是,然后我阅读了字节序以及 64 位如何读取 MSB 与 32 位(即 LSB)的区别。因此,获取我的数据并将其反转,以便将其存储在我的 long 中,因为 MSB 是我想到的唯一解决方案。 ofc,有关于 4 个额外字节的情况,在这种情况下无关紧要,我只是采用十进制输出并显示我选择的任何随机六位数字。但是在编程上,我想最好只使用 4 字节长而不处理整个浪费的 4 字节问题。
最佳答案
在这个问题和你之前的问题之间,听起来这里有几个基本的混淆:
如果您的程序要在 64 位机器上运行,听起来您应该在 64 位机器上对其进行编译和单元测试。在 32 位机器上运行单元测试可以让您确信程序在该环境中是正确的,但并不一定意味着代码在 64 位环境中是正确的。
您似乎对 32 位和 64 位架构与字节序的关系感到困惑。 32 位机器并不总是小端,64 位机器也不总是大端。它们是两个独立的概念,可以独立变化。
字节序只对由多个字节组成的单个值有影响;例如,整数 305,419,896 (0x12345678) 需要 4 个字节来表示,或者一个 UTF-16 字符(通常)需要 2 个字节来表示。对于这些,存储顺序很重要,因为字节被解释为一个单元。听起来您正在使用的是一系列原始字节(如校验和或哈希)。像这样的值,其中多个字节不成组解释,不受处理器字节序的影响。在您的情况下,将字节数组转换为 long long *
实际上创建一个潜在的字节顺序问题(在小端架构上,您的字节现在将以相反的方式解释顺序),而不是相反。
字节顺序也无关紧要,除非程序的小端和大端版本实际上必须相互通信。例如,如果 little-endian 程序写入一个包含多字节整数的文件而不进行交换,而 big-endian 程序将其读入,则 big-endian 程序可能会误解数据。听起来您认为在小端平台上运行的代码会突然在大端平台上崩溃,即使两者从不交换数据。如果两个版本不需要相互通信,您通常不需要担心架构的字节序。
另一个混淆点(可能有点迂腐)。一个字节不存储“十六进制值”与“十进制值”,它存储一个整数。十进制和十六进制只是表示(打印)特定整数值的两种不同方式。无论如何,计算机内存中都是二进制,十六进制只是与二进制的简单转换,而十进制对我们的大脑来说很方便,因为我们有十个手指。
假设您要做的是将数组的每个字节的值打印为十进制,您可以这样做:
unsigned char bytes[] = {0x12, 0x34, 0x56, 0x78};
for (int i = 0; i < sizeof(bytes) / sizeof(unsigned char); ++i)
{
printf("%u ", (unsigned int)bytes[i]);
}
printf("\n");
输出应该是这样的:
18 52 86 120
关于c++ - 将字节数组的字节交换为 long long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2061154/
我正在尝试创建一个包含 int[][] 项的数组 即 int version0Indexes[][4] = { {1,2,3,4}, {5,6,7,8} }; int version1Indexes[
我有一个整数数组: private int array[]; 如果我还有一个名为 add 的方法,那么以下有什么区别: public void add(int value) { array[va
当您尝试在 JavaScript 中将一个数组添加到另一个数组时,它会将其转换为一个字符串。通常,当以另一种语言执行此操作时,列表会合并。 JavaScript [1, 2] + [3, 4] = "
根据我正在阅读的教程,如果您想创建一个包含 5 列和 3 行的表格来表示这样的数据... 45 4 34 99 56 3 23 99 43 2 1 1 0 43 67 ...它说你可以使用下
我通常使用 python 编写脚本/程序,但最近开始使用 JavaScript 进行编程,并且在使用数组时遇到了一些问题。 在 python 中,当我创建一个数组并使用 for x in y 时,我得
我有一个这样的数组: temp = [ 'data1', ['data1_a','data1_b'], ['data2_a','data2_b','data2_c'] ]; // 我想使用 toStr
rent_property (table name) id fullName propertyName 1 A House Name1 2 B
这个问题在这里已经有了答案: 关闭13年前。 Possible Duplicate: In C arrays why is this true? a[5] == 5[a] array[index] 和
使用 Excel 2013。经过多年的寻找和适应,我的第一篇文章。 我正在尝试将当前 App 用户(即“John Smith”)与他的电子邮件地址“jsmith@work.com”进行匹配。 使用两个
当仅在一个边距上操作时,apply 似乎不会重新组装 3D 数组。考虑: arr 1),但对我来说仍然很奇怪,如果一个函数返回一个具有尺寸的对象,那么它们基本上会被忽略。 最佳答案 这是一个不太理
我有一个包含 GPS 坐标的 MySQL 数据库。这是我检索坐标的部分 PHP 代码; $sql = "SELECT lat, lon FROM gps_data"; $stmt=$db->query
我需要找到一种方法来执行这个操作,我有一个形状数组 [批量大小, 150, 1] 代表 batch_size 整数序列,每个序列有 150 个元素长,但在每个序列中都有很多添加的零,以使所有序列具有相
我必须通过 url 中的 json 获取文本。 层次结构如下: 对象>数组>对象>数组>对象。 我想用这段代码获取文本。但是我收到错误 :org.json.JSONException: No valu
enter code here- (void)viewDidLoad { NSMutableArray *imageViewArray= [[NSMutableArray alloc] init];
知道如何对二维字符串数组执行修剪操作,例如使用 Java 流 API 进行 3x3 并将其收集回相同维度的 3x3 数组? 重点是避免使用显式的 for 循环。 当前的解决方案只是简单地执行一个 fo
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有来自 ASP.NET Web 服务的以下 XML 输出: 1710 1711 1712 1713
如果我有一个对象todo作为您状态的一部分,并且该对象包含数组列表,则列表内部有对象,在这些对象内部还有另一个数组listItems。如何更新数组 listItems 中 id 为“poi098”的对
我想将最大长度为 8 的 bool 数组打包成一个字节,通过网络发送它,然后将其解压回 bool 数组。已经在这里尝试了一些解决方案,但没有用。我正在使用单声道。 我制作了 BitArray,然后尝试
我们的数据库中有这个字段指示一周中的每一天的真/假标志,如下所示:'1111110' 我需要将此值转换为 boolean 数组。 为此,我编写了以下代码: char[] freqs = weekday
我是一名优秀的程序员,十分优秀!