endianness相关内容

Big Endian 和 Little Endian 字节顺序的区别

Big Endian 和 Little Endian Byte 顺序有什么区别? 这两个似乎都与Unicode和UTF16有关.我们究竟在哪里使用它? 解决方案 Big-Endian (BE)/Little-Endian (LE) 是组织多字节单词的两种方式.例如在UTF-16中用两个字节表示一个字符时,有两种方法可以将字符0x1234表示为一串字节(0x00-0xFF): 字节索 ..
发布时间:2021-12-26 13:47:26 其他开发

这个程序是如何运作的?

#include int main() {浮动 a = 1234.5f;printf("%d\n", a);返回0;} 它显示一个 0!!这怎么可能?这是什么道理? 我特意在printf语句中放了一个%d来研究printf的行为. 解决方案 那是因为 %d 需要一个 int 但你提供了一个浮点数. 使用 %e/%f/%g 打印浮点数. 关于为什么打印0:浮点数在发送到p ..
发布时间:2021-12-21 10:09:20 C/C++开发

RIFF WAV 文件中是否保证格式参数的字节序?

在 RIFF WAV 文件中是否保证格式参数的字节序?我听到了相互矛盾的答案,包括对RIFX 文件格式. 解决方案 是. 如果文件以 RIFF 开头,则它是小端.如果它以 FFIR 或 RIFX 开头,则可能不是.一般来说,支持 WAV 格式就意味着支持 RIFF 文件,尽管添加 RIFX 支持应该不难. BWF(广播波格式)的 AES31 规范引用了这个 RIFF 规范:ht ..
发布时间:2021-12-20 23:51:24 其他开发

为什么优化会杀死这个功能?

我们最近在大学举办了一场关于多种语言的编程专题讲座. 讲师写下了以下函数: inline u64 Swap_64(u64 x){u64 tmp;(*(u32*)&tmp) = Swap_32(*(((u32*)&x)+1));(*(((u32*)&tmp)+1)) = Swap_32(*(u32*) &x);返回 tmp;} 虽然我完全理解这在可读性方面也是非常糟糕的风格,但他的主要观点 ..
发布时间:2021-12-20 15:42:16 C/C++开发

字节序何时成为一个因素?

据我所知,字节序是指组成多字节字的字节顺序不同,至少在最典型的情况下是这样.这样一个 16 位整数可以存储为 0xHHLL 或 0xLLHH. 假设我没有错,我想知道的是,在 Endian 可能不同也可能不同的两台计算机之间发送信息时,Endianness 何时成为主要因素. 如果我以 char 数组的形式传输一个短整数 1,并且没有更正,它是否被接收并解释为 256? 如果我使 ..
发布时间:2021-12-20 10:45:15 C/C++开发

理解 htonl() 和 ntohl()

我正在尝试使用 unix 套接字来测试向本地主机发送一些 udp 数据包. 据我所知,在设置 ip 地址和端口以发送数据包时,我会用转换为网络字节顺序的值填充我的 sockaddr_in.我在 OSX 上,我很惊讶这个 printf("ntohl: %d\n", ntohl(4711));printf("htonl: %d\n", htonl(4711));printf("普通:%d\n" ..
发布时间:2021-12-20 10:35:40 其他开发

浮点字节序?

我正在为实时离岸模拟器编写客户端和服务器,并且由于我必须通过套接字发送大量数据,因此我使用二进制数据来最大化我可以发送的数据量.我已经知道整数字节序,以及如何使用 htonl 和 ntohl 来规避字节序问题,但是我的应用程序,几乎所有的模拟软件,都处理大量的浮点数. 我的问题是:在处理浮点数的二进制格式时是否存在字节序问题?我知道我的代码将运行的所有机器都使用浮点的 IEEE 实现,但是在 ..
发布时间:2021-12-20 10:12:26 C/C++开发

为什么网络字节顺序被定义为大端?

正如标题中所写,我的问题是,为什么 TCP/IP 在传输数据时使用大端编码而不是替代的小端方案? 解决方案 RFC1700 表示一定是这样.(并将网络字节顺序定义为大端). 互联网协议文档中的约定是以十进制表示数字并以“大端"表示数据命令[科恩].也就是说,字段是从左到右描述的,最左边的重要八位字节和最不重要的八位字节在左边没错. 他们所做的参考是 圣战与和平请求科恩,D.计 ..
发布时间:2021-12-20 10:07:05 其他开发

Marshal.PtrToStructure(并再次返回)和字节序交换的通用解决方案

我有一个系统,其中远程代理发送序列化结构(来自嵌入式 C 系统)供我通过 IP/UDP 读取和存储.在某些情况下,我需要发回相同的结构类型.我认为我使用 Marshal.PtrToStructure(接收)和 Marshal.StructureToPtr(发送)进行了很好的设置.但是,一个小问题是网络大端整数需要转换为我的 x86 小端格式才能在本地使用.当我再次发送它们时,大端是要走的路. ..
发布时间:2021-12-11 11:23:10 C#/.NET

BinaryWriter Endian 问题

我正在使用 BinaryWriter 类将二进制文件写入磁盘.当我调用 Write 方法,传递一个无符号的 short 值时,它以小端格式写入它.例如: bw.Write(0xA000); 将二进制文件中的值写入为 0x00 0xA0.有没有办法让 BInaryWriter 使用 Big Endian?如果不是,是否可以创建一个新类,继承BinaryWriter并重载Write函数使其写入大端 ..
发布时间:2021-12-06 10:18:42 C#/.NET

在 C 中将大端转换为小端 [不使用提供的函数]

我需要在 C 中编写一个将大端转换为小端的函数.我不能使用任何库函数. 解决方案 假设您需要的是一个简单的字节交换,请尝试类似 无符号 16 位转换: swapped = (num>>8) |(num 无符号 32 位转换: swapped = ((num>>24)&0xff) |//将字节 3 移动到字节 0((num>8)&0xff00) |//将字节 2 移动到字节 1( ..
发布时间:2021-12-02 08:08:55 其他开发

如何在 C++ 中的 big-endian 和 little-endian 值之间进行转换?

我如何在 C++ 中的 big-endian 和 little-endian 值之间进行转换? 为清楚起见,我必须将二进制数据(双精度浮点值以及 32 位和 64 位整数)从一种 CPU 架构转换为另一种架构.这不涉及网络,所以 ntoh() 和类似的函数在这里不起作用. 注意:我接受的答案直接适用于我的目标编译器(这就是我选择它的原因).但是,这里还有其他非常好的、更便携的答案. ..
发布时间:2021-12-01 15:04:18 C/C++开发

在 C++ 程序中以编程方式检测字节序

有没有一种程序化的方法来检测你是在大端还是小端架构上?我需要能够编写在 Intel 或 PPC 系统上执行的代码并使用完全相同的代码(即无条件编译). 解决方案 我不喜欢基于类型双关的方法——它经常被编译器警告.这正是工会的用途! bool is_big_endian(void){联合{uint32_t i;字符 c[4];} bint = {0x01020304};返回 bint.c[ ..
发布时间:2021-11-26 23:53:09 C/C++开发

为什么 BinaryReader.ReadUInt32() 反转位模式?

我正在尝试使用 BinaryReader 类读取二进制文件,我需要将它作为 UInt32 块读取,然后进行一些位移等后记. 但是,由于某种原因,当我使用 ReadUInt32 方法时,位顺序颠倒了. 例如,如果我有一个文件,其中前四个字节在十六进制中看起来像这样,0x12345678,它们在被 ReadUInt32 读取后最终是这样的:0x78563412. 如果我使用 Read ..
发布时间:2021-11-26 14:12:52 C#/.NET

在 Java 中将字节数组转换为整数,反之亦然

我想在 Java 中将一些数据存储到字节数组中.基本上只是数字,每个数字最多可占用 2 个字节. 我想知道如何将整数转换为 2 字节长的字节数组,反之亦然.我在谷歌上找到了很多解决方案,但大多数都没有解释代码中发生的事情.有很多变化的东西我不太明白,所以我希望得到一个基本的解释. 解决方案 使用 java.nio 命名空间,特别是 ByteBuffer.它可以为您完成所有工作. b ..
发布时间:2021-11-25 16:50:04 Java开发

如何BSWAP 64位寄存器的低32位?

我一直在寻找有关如何将 BSWAP 用于 64 位寄存器的低 32 位子寄存器的答案.例如,0x0123456789abcdef 在 RAX 寄存器内,我想用一条指令将其更改为 0x01234567efcdab89(出于性能考虑). 所以我尝试了以下内联函数: #define BSWAP(T) { \__asm__ __volatile__ ( \“bswap %k0"\: "=q" (T ..
发布时间:2021-11-25 06:31:13 C#

为什么 BinaryReader.ReadUInt32() 反转位模式?

我正在尝试使用 BinaryReader 类读取二进制文件,我需要将它作为 UInt32 块读取,然后进行一些位移等后记. 但是,由于某种原因,当我使用 ReadUInt32 方法时,位顺序颠倒了. 例如,如果我有一个文件,其中前四个字节在十六进制中看起来像这样,0x12345678,它们在被 ReadUInt32 读取后最终是这样的:0x78563412. 如果我使用 Read ..
发布时间:2021-11-25 05:57:28 C#/.NET

有没有什么“标准"?C++ 中 64 位整数的类似 htonl 的函数?

我正在研究 memcache 协议的实现,该协议在某些时候使用 64 位整数值.这些值必须以“网络字节顺序"存储. 我希望有一些 uint64_t htonll(uint64_t value) 函数来进行更改,但不幸的是,如果它存在,我找不到它. 所以我有 1 或 2 个问题: 是否有任何便携式(Windows、Linux、AIX)标准函数来执行此操作? 如果没有这样的功能,你 ..
发布时间:2021-11-25 05:00:45 C/C++开发

C++ 中的 64 位 ntohl()?

htonl() 的手册页似乎建议您最多只能将其用于 32 位值.(实际上,ntohl() 是为 unsigned long 定义的,在我的平台上是 32 位.我想如果 unsigned long 是 8 个字节,它可以用于 64 位整数). 我的问题是我需要将 64 位整数(在我的例子中,这是一个 unsigned long long)从 big endian 转换为 little endi ..
发布时间:2021-11-25 04:58:41 服务器开发

64 位值的字节序表示

假设我有 unsigned long long x = 0x0123456789ABCDEF. 以下哪个是正确的?(我只能验证第一个): 在 32 位小端处理器上,它将在内存中显示为 67 45 23 01 EF CD AB 89. 在 64 位小端处理器上,它将在内存中显示为 EF CD AB 89 67 45 23 01. 在 32 位 big-endian 处理器上,它将在内 ..
发布时间:2021-11-24 23:47:12 C#