草庐IT

endian-ness

全部标签

c++ - 交换 float 和 double 的 "endianness"

我想切换float和double值的“字节顺序”,它可以正常工作,方法如下:floatconstv{1.f};swap(reinterpret_cast(v));是否有更好的方式来进行交换,无需强制转换?编辑:swap()是gcc内置函数的C++包装器,我没有在此处包含它。uint16_t__builtin_bswap16(uint16_tx)uint32_t__builtin_bswap32(uint32_tx)uint64_t__builtin_bswap64(uint64_tx)某些数据格式需要字节顺序交换,例如CBOR。 最佳答案

c++ - 在 c++/c++11 中测试 "POD-ness"?

我有一些代码采用打包的POD结构/类并将其复制到内存块中。structA{inta;intb;}a;memcpy(mymemoryblock,(void*)&a,sizeof(A));//laterIgetareplyand...memcpy((void*)&a,mymemoryblock,sizeof(A));这仅对POD类型的数据有效,我想知道是否有一种方法可以测试POD-ness。如果有人不小心给这个类添加了一个成员函数,memcpy操作就会失效,但仍然可以编译。这导致很难检测到错误。是否有is_POD_type(A)函数或其他技巧可用于在运行时或编译时检测PODness?

c++ - 强制执行 constexpr 函数的 constexpr-ness 的惯用方式

考虑以下示例代码:#includevoidblah();intbuh;constexprautoget(){returnstd::get(std::make_tuple(&blah,&buh));}intmain(){get();}人们会期望因为函数get()是一个常量表达式,所以它会返回一个常量。事实并非如此:std::make_tuple、std::get被实例化并调用:https://godbolt.org/g/PkHrTp现在,如果我们将get()的实现替换为constexprautoget(){constexprautox=std::get(std::make_tuple(&

c++ - Clang、std::next、libstdc++ 和 constexpr-ness

采用以下代码:#includeconstexprstd::arraya{};static_assert(std::next(std::begin(a))==std::begin(a)+1);使用-std=c++17GCC可以完美地编译它,但Clang会提示该表达式不是整型常量表达式。看起来问题出在std::next上,但是在C++17中应该是constexpr。尽管如此,std::next在std库中,而不是在编译器本身中,因此发生了一些奇怪的事情。为了让事情变得更好,如果您将-stdlib=libc++传递给Clang,该示例将完美编译。这是怎么回事?谁对谁错?编辑这个问题似乎与cl

ios - 在 Swift 中将 float 转换为 little endian

我正在处理来自套接字的数据并成功地将数据转换为Int和Floats:letfloat=data.withUnsafeBytes{$0.pointee}asFloat一切正常,直到一部iPhone6Plus似乎在使用BigEndian处理数据。我可以毫不费力地转换Int:letuint32=UInt32(littleEndian:data.withUnsafeBytes{$0.pointee})letint=Int(uint32)不幸的是,我似乎无法弄清楚如何转换float据。 最佳答案 一种可能的解决方案是先将数据读入一个32位整数

php fgetcsv 和整数转换(UTF8 x UCS-2 Little Endian)

更新4:我发现(正如所怀疑的那样)文件编码是造成这种情况的原因。我将csv文件从UCS-2LittleEndian转换为UTF-8,一切正常。无论如何,我需要找到一些方法让PHP正确理解输入文件。已尝试sellocale但没有成功。---原始问题---我有一些数据以“表格”格式存储在csv文件中,我想将这些数据存储为数据库中的(tag,tagtimestamp,tagvalue)。但是找不到将存储在$v数组中的值转换为整数值的方法:$p=0;$tag=array();$dt=array();$v=array();$handle=fopen("sga/2013.10.054.vol2.c

java - 从Python服务器到Android客户端的图像数据丢失(Endian问题??)

我需要帮助从我的树莓PI(Python)通过TCP传输PNG图像到我的Android应用程序(Java)。我花了近两个星期的时间来理解和解决这个问题,所以任何帮助都会非常感谢。我已经建立了一个客户机-服务器架构,这样我的RaspberryPi3记录音频,对其进行一些分析,然后(通过TCP)将数据发送到Android应用程序,显示在应用程序屏幕上。记录和分析完成后,我就可以连接并传输显示在应用程序上的字符串数据,没有问题。然而,我一直没有成功地将一个图像从rpi传输到android应用程序。所以基本上,图像存储在rpi上,我试图将图像传输到应用程序以显示它。当前实施:关于rpi(pyth

c# - 如何使用c#将big endian发送到网络流

我尝试通过sslStream使用套接字传输文件数据。看来我必须在数据之前发送文件数据长度。问题是代码Byte[]size=BitConverter.GetBytes(fileData.Length)返回的是小端,但互联网协议(protocol)使用的是大端。我如何将其转换为大端并将其写入流; 最佳答案 我假设您只想发送一个int值。传输前应颠倒字节顺序:byte[]bytes=BitConverter.GetBytes(fileData.Length);if(BitConverter.IsLittleEndian)Array.Rev

java - 将 little Endian 文件转换为 big Endian

我怎样才能将小字节序二进制文件转换成大字节序二进制文件。我有一个用C编写的二进制二进制文件,我正在用Java使用DataInputStream读取这个文件,它以大端格式读取。我还查看了ByteBuffer类,但不知道如何使用它来获得我想要的结果。请帮忙。非常感谢 最佳答案 打开NIO文件channel:FileInputStreamfs=newFileInputStream("myfile.bin");FileChannelfc=fs.getChannel();设置ByteBuffer字节顺序(由[get|put]Int()、[ge

redis - 为什么redis只用little endian存储内存数据?

在阅读redis源码时,发现redis存储内存数据的方式只有littleendian。获取这些数据时,必须将它们转换为本地机器字节顺序。比如在ziplist.c中:staticint64_tzipLoadInteger(unsignedchar*p,unsignedcharencoding){int16_ti16;int32_ti32;int64_ti64,ret=0;if(encoding==ZIP_INT_8B){ret=((int8_t*)p)[0];}elseif(encoding==ZIP_INT_16B){memcpy(&i16,p,sizeof(i16));memrev1