当前位置: 首页 > 知识库问答 >
问题:

为什么在小端机器上,分配十六进制值会得到大端的等价值?[重复]

叶琦
2023-03-14

这是一个简单的c语句:

uint32_t x = 0x04000000;

在我的小端机器上,我假设x等于4。但是它是67108864。

所以一定有什么非常基本的东西我不明白。你能帮忙解释一下吗?

共有3个答案

严恩
2023-03-14
uint32_t x = 0x04000000;

此操作与机器endianness无关。0x04000000是一个十六进制文字,值为67'108'864(十进制)。这对任何endianness都是正确的。

如果你想看到endianness系统的效果,你需要摆弄底层内存。例如:

uint32_t x;
memcpy(&x,  (const unsigned char[4]) {0x04u, 0, 0, 0}, 4);
轩辕涵亮
2023-03-14

文本0x04000000表示数字67108864。它在内存中的存储方式会有所不同,具体取决于使用的是小端字节顺序还是大端字节顺序,但这不会改变它的值。

柴正祥
2023-03-14

当你给一个变量赋值时,你是在设置值,而不是表达式。

十六进制数0x04000000与十进制数67108864相同,因此这就是分配的内容。数字以十六进制表示的事实不会改变分配的工作方式。

如果你做了这样的事:

unsigned char n[4] = "\x4\x0\x0\x0";
memcpy(&x, n, sizeof(x));

然后,x将在一个小的endian机器上包含值4。

 类似资料:
  • 此表中的颜色全部不透明。我猜 的值设置为 透明度的准则是什么? 例如,将此颜色FFF0F8FF(AliceBlue)转换为透明代码,如?

  • 我用JSON格式存储了很多颜色。我使用rootbeer via gulp将它们转换为sass映射,可以由SCSS处理: 至 我可以很好地使用语法中的颜色,但一旦应用了任何颜色函数,如,编译器就会失败,因为颜色类型完全消失了。 即使使用也不允许sass将其视为字符串,但它需要是一种颜色。 我的问题是,是否有任何方法可以让我强制编译器将此作为一种颜色来处理呢?另一种方法是省略所有内置颜色函数的使用。

  • 问题内容: 我有一个带有VARBINARY列的表。我需要插入一个字符串,例如“ 4D2AFF”,它分别代表十六进制值0x4D,0x2A和0xFF。如何构造此语句? 问题答案: 您可以使用函数将具有十六进制对的十六进制字符串转换为二进制,然后反过来执行。 即 和

  • 问题内容: 我有一个家庭作业,需要在十进制,二进制和十六进制之间进行三向转换。我需要帮助的功能是将十进制转换为十六进制。我几乎不了解十六进制,但是如何将十进制转换为十六进制。我需要一个接受并返回的函数。不幸的是我没有此功能的任何草稿,我完全迷路了。我只有这个。 另外,我不能使用诸如Integer.toHexString()之类的预制函数或任何其他东西,我需要真正地制作算法,否则我什么都不会学。 问

  • 问题内容: 如何将RGB格式的颜色转换为十六进制格式,反之亦然? 例如,转换为。 问题答案: 注 :这两个版本的期待整数值,并且,所以你需要,如果你有非整数值做自己的舍入。 以下将执行RGB到十六进制的转换,并添加任何所需的零填充: 转换另一种方式: 最后,在答案中讨论并在@cwolves的评论中建议使用的替代版本: 更新 这是它的一个版本,还解析了一个速记的三元组,例如“#03F”:

  • 我有一个数字文本框,显示百分比值,并允许用户更新它在角应用程序。 作为十进制值存储在模型中(例如0.15)。是否有一个管道可以在文本框中以百分比形式显示值(例如15),同时在模型中仍然保持值为十进制。例如。如果用户将它从15更新到16,我想将模型值更改为0.16。我不需要在文本框中显示“%”符号。