草庐IT

Endianness

全部标签

c++ - 这种 CRC32 方法的大端兼容版本会是什么样子?

我正在开展一个项目,该项目需要对正在传输的数据进行CRC32检查。我想让我的代码不仅兼容Intel架构(“LittleEndian”),而且兼容Solaris架构(“BigEndian”)。我发现这个“CCRC32”在两台小端机器上工作得很好,但完全没有通过任何跨平台测试:代码:CCRC32.h&CCRC32.cpp(取自维基百科的“外部链接”)http://en.wikipedia.org/wiki/Cyclic_redundancy_check这是代码的方法示例:voidCCRC32::PartialCRC(unsignedlong*ulCRC,constunsignedchar*

c++ - 如何以位字节序将数字转换为字节数组

我正在尝试使用zlibAPI解压缩在VB6中创建的一些数据。我读过qUncompress函数可以做到这一点:http://doc.trolltech.com/4.4/qbytearray.html#qUncompress我已经通过readRawBytes从QDataStream读取数据到一个char数组,然后我将其转换为QByteArray以进行解压。我具有压缩长度和预期的解压缩长度,但没有得到从qUncompress返回的任何内容。但是,我需要以大端格式在预期的解压缩长度前添加。有没有人这样做过并举个例子? 最佳答案 我很久没有使

c++ - istream 和 ostream 跨平台

假设我想在我的大端机器上写这个an_ostream_implmy_output_on_BE;my_output_on_BE这是在我的小端机器上an_istream_implmy_input_on_LE;__int32value;my_input_on_LE>>value;assert(value==0x1234);是否有允许这样做的istream/ostream实现?例如。总是以BigEndian(或任何格式)流式传输数字? 最佳答案 如果您需要在机器之间共享比单个整数更复杂的数据,我衷心推荐GoogleProtocolBuffer

c++ - 如何确定 NifTi 文件的字节顺序?

我有一个NifTi文件,当我加载它时,值奇怪地分散在int_32的范围内。但是,当我通过NifTi-Python绑定(bind)加载同一个文件时,值范围不同且正确。(我知道这是正确的,因为文件的生产者(FSL)声称只产生该范围内的值。)所以我想检查这些值是否真的以不同的字节顺序存储(与其他文件相比),如果是,请正确解释这些值。 最佳答案 您可以使用nifti_1_header结构中的第一个字段。它是sizeof_hdr,它包含header的大小(在我的例子中是一个348字节的结构,而不是三个较小的结构)。简单地读取头的前4个字节,它

c++ - strtoul 不是字节序安全的吗?

所以我在小端和大端机器上都使用strtoul将字符串转换为无符号长整型。小端机器返回正确的值,而大端机器没有。这个函数真的不兼容大端机器吗?如果是这样,是否有变通办法?代码:printf("%s\n",cLongs);theLongs[i]=strtoul(cLongs,NULL,10);cout小端结果:1099188638048931returnedunsignedlongvaluefromstring:1099188638048931大端结果:1099188638048931returnedunsignedlongvaluefromstring:4294967295附言对于Big

c++ - 如何从网络管理双字节序

我对这个问题的答案有很大的疑问Swapbitsinc++foradouble然而,这个问题或多或少是我要搜索的:我从网络收到一个double,我想在我的机器中正确编码它。在我收到int的情况下,我使用ntohl执行此代码:int*piData=reinterpret_cast((void*)pData);//manageendiannessofincommingnetworkdataunsignedlongulValue=ntohl(*piData);intiValue=static_cast(ulValue);但是如果我收到一个double,我不知道该怎么办。问题的答案建议做:tem

c++ - C语言在不同架构上的文件操作

作为一个研究项目,我们正在标准C(BINARY)文件处理库(stdio)之上编写一个抽象层,通过提供一些用于事务处理文件的额外功能。工作流程如下:用户使用我们的API(或标准fopen)打开一个文件。都返回FILE*.文件以二进制模式打开!用户使用标准库命令(例如fwrite)将数据写入文件用户使用我们的API在打开的文件上打开一个交易:TRANSACTIONa=trans_start(FILE*)用户为TRANSACTION设置数据验证器对象(set_validator(TRANSACTION,int(*)(char*))用户使用我们自己的API(inttrans_write_str

c++ - Little Endian - Big Endian 问题

小端与大端大字节序=0x31014950小字节序=0x50490131但是使用这个方法inlineunsignedintendian_swap(unsignedint&x){return(((x&0x000000FF)>8)|((x&0xFF000000)>>24));}结果=0x54110131我花了很多时间尝试很多类似的方法,甚至是像这样的库unsignedlong_byteswap_ulong(unsignedlongvalue);但仍然没有运气..所有返回相同的结果编辑我正在使用MicrosoftVisualStudio2008开发Little-Endian系统例子如下intm

c# - 位移位是否总是考虑 Endian 体系结构?

假设我正在从C++移植代码并需要在C#中模拟相同的位移技术:每当我执行位移时,我是否必须考虑架构的Endain-ness? 最佳答案 没有。位移是一种纯粹的代数运算。它不比乘以二更依赖于平台。平台相关的是将变量解释为字符数组的结果。 关于c#-位移位是否总是考虑Endian体系结构?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/15315425/

c++ - 结构中的位顺序不是我所期望的

我有一个使用16位float的框架,我想分离它的组件然后用于32位float。在我的第一种方法中,我使用了移位和类似的方法,虽然它有效,但阅读起来却非常困惑。然后我想改用自定义位大小的结构,并使用union来写入该结构。重现问题的代码:#include#includeunionfloat16_and_int16{struct{uint16_tMantissa:10;uint16_tExponent:5;uint16_tSign:1;}Components;uint16_tbitMask;};intmain(){uint16_tinput=0x153F;float16_and_int16