内存中的阵列存储
Array storage in memory
我正在读取一串字符,我需要将它们直接作为uint64_t值。我使用了以下方法。但似乎数组是按倒序存储的。但是,当我输出它们的地址时,内存位置是有序的。对不起,如果这是一个太愚蠢的问题。我正在努力弄清楚我的基本记忆知识。
#include <iostream>
int main() {
unsigned char ar[8] = {1, 0, 0, 0, 0, 0, 0, 0};
uint64_t num = *((uint64_t*)ar);
std::cout << num << std::endl;
for(size_t i = 0; i < 8; i++) {
std::printf("%lu %xn", i, &ar[i]);
}
}
以下是输出
1
0 ffffcc08
1 ffffcc09
2 ffffcc0a
3 ffffcc0b
4 ffffcc0c
5 ffffcc0d
6 ffffcc0e
7 ffffcc0f
我预计num
的结果是 2^56。
问题是字节序,你的系统是小端序,你像在一个大端系统中一样阅读uint64_t
。在 C++20 中有一个没有分支的编译时解决方案:
可以使用std::endian
在编译时查找endian
,并使用if constexpr
来决定函数的工作方式。
#include<iostream>
#include <type_traits>
template <typename T>
void print()
{
constexpr bool is_little_endian = (std::endian::native == std::endian::little);
if constexpr (is_little_endian) {
unsigned char ar[8] = {0, 0, 0, 0, 0, 0, 0, 1};
T num = *((T*)ar);
std::cout << num << std::endl;
} else {
unsigned char ar[8] = {1, 0, 0, 0, 0, 0, 0, 0};
T num = *((T*)ar);
std::cout << num << std::endl;
}
}
int main()
{
print<uint64_t>();
}
输出
72057594037927936
住
相关文章:
- 将一个阵列中的数据存储到另外两个阵列中不起作用
- 阵列的临时存储如何用于C++中的删除恢复?
- 如何在阵列中存储多个队列?
- 内存中的阵列存储
- 在字符阵列C 中存储整数值
- 如何将整个单词存储在单个阵列插槽中
- 将25个甚至整数存储到一个名为intlist的整数阵列中,然后在屏幕上显示数组,并在屏幕上显示名为fivintegers
- 我如何将整数转换为存储在字符阵列中的十六进制字节
- 需要将单词的文本文件存储到C 中的字符阵列中
- 将指针或一系列指针存储在动态阵列中
- 如何将整数存储在字符阵列中
- 将多个功能存储到阵列C 以进行循环
- 存储文件中的字符串,但是数组仍然为空?阵列大小的循环
- C 私有阵列访问和存储
- 将文件从文件存储到阵列C
- 存储矢量中的动态阵列
- 2D阵列和1D阵列存储比较
- 将整数从for循环存储在全球阵列中
- 将阵列存储到动态内存中
- 将数据存储到多维阵列中