Tag: endianness

用于Hex的BitConverter VS ToString

只是想知道是否有人可以解释为什么以下两行代码会返回“不同”的结果? 是什么导致了反转的价值? 这与字节序有关吗? int.MaxValue.ToString(“X”) //Result: 7FFFFFFF BitConverter.ToString(BitConverter.GetBytes(int.MaxValue)) //Result: FF-FF-FF-7F

编程语言中的字节序

好吧,“Endianness”主题对我来说总是有点混乱,但我从来没有遇到过任何问题,这些问题要求我甚至考虑我使用的二进制编写器/阅读器的默认行为。 我正在c#中写一个PNG解码器。 PNG文件格式规范声明所有数字都以大端符号存储(我觉得非常自然)。 但是,当我注意到.NET的BinaryReader / Writer使用一个小尾数表示法时,我感到非常惊讶。 让我更加困惑的是,事实上,java的二进制IO与大端符号一起工作(不是java程序员,所以也许我错了)。 所以我开始考虑以下问题: 1 – 为什么它们是这样的? 我的意思是基类库的默认行为。 2 – 为什么在使用.NET的System.IO时无法选择首选符号? 我目前正在使用Jon Skeet的 MiscUtil ,它就像一个魅力(感谢,man =))。 但是在基类库中看到这个function会很酷。

函数将hex字符串转换为BitArray C#

我创建了以下函数,它将按要求执行(将HEX字符串转换为BitArray)。 我不确定函数的效率,但我现在的主要问题是Convert.ToInt64函数是特定于endian的 。 当这被移植到备用芯片组时,我们将得到不同的结果(或例外)。 所以有人可以想到另一种方法来进行这种转换??? public BitArray convertHexToBitArray(string hexData) { string binary_values = “”; BitArray binary_array; if (hexData.Length <= "FFFFFFFFFFFFFFFF".Length) // Max Int64 { binary_values = Convert.ToString(Convert.ToInt64(hexData, 16), 2); binary_array = new BitArray(binary_values.Length); for (int i = 0; i < binary_array.Length; i++) { if (binary_values[i] == '0') { binary_array[i] = false; } else { binary_array[i] […]

在C#中没有UTF-32大端?

在C#中, Encoding.UTF32是UTF-32 little-endian, Encoding.BigEndianUnicode是UTF-16 big-endian, Encoding.Unicode是UTF-16 little-endian。 但我找不到UTF-32大端的任何东西。 我正在开发一个简单的textviewer,并且不认为有很多文档用UTF-32大端编码,但我也想为此做好准备,以防万一。 C#不支持UTF32大端吗? BTW Java支持它。

C#Endian敏感吗?

例如,C#是否对Endian敏感,将代码如下: int a = 1234567; short b = *(short*)&i; 始终为b分配相同的值。 如果是这样,它会有什么价值? 如果没有,如果带有指针的代码,有什么好方法可以处理字节序?

JPEG字节序在编码时如何重要?

我目前正在开展一个涉及图片的大项目。 我遇到的一个重大问题是图片的字节顺序(jpeg更清晰)。 我总是认为,在我们的现代世界中,我们不必讨论这个问题,但现在我不确定。 我所做的: 我向IP摄像机发出HTTP请求,摄像机返回一个字节数组。 我使用Image.FromStream将这些字节解析为.NET中的对象Image。 我使用我的Image对象并执行保存到硬盘上的物理文件。 这些图片然后在我的应用程序的另一个模块中使用,该模块使用第三方“查看器”对图像进行一些操作。 查看器使用Windows XP和Windows Vista中使用计算机生成的所有图片。 但是当使用Windows 7机器生成图片时,图片全部搞砸了。 假设使用Windows XP创建的图片将被称为PictureXP,使用Windows 7创建的图片将被称为Picture7。我使用exiftools检查文件,发现PictureXP和Picture7之间有2个不同的字段。 PictureXP:Exif字节顺序:Little-endian图7:Exif字节顺序:Big-endian Picture7还有一个附加字段:User Comment :. 这两张照片可以在任何照片浏览器中正常打开,只有在这个第三方观看者中,图片才会显示出混合,3张图片之间的唯一区别就是这些字段。 我想知道的是什么: 是否有可能第三方需要将附加代码添加到他的软件中,以便它需要处理图片的字节顺序? 我想那里的所有图片程序都处理那个? 我是否有可能将我的jpeg的endianness改为little-endian? 我在某处读过jpeg文件的内容总是应该是相同的字节序,但似乎它没有考虑exif数据。 如果有可能,我会喜欢.NET中的解决方案…… 任何有助于解决这种情况的事情也将被视为一种答案。 非常感谢! 编辑1 :我发现这篇文章确认在exif头中找到的endiannes只适用于exif头,并且jpeg文件总是在big-endian中。 那么有没有办法改变exif标题,以便第三方软件能够读取他需要的东西?

有关Endian-ness和.Net的详细信息?

我有一些关于endian-ness的问题已经足够相关,我保证将它们作为一个问题加入: 1)字节序是由.Net还是由硬件决定的? 2)如果由硬件决定,我怎样才能弄清楚硬件在C#中的端点? 3)endian-ness是否影响二进制交互,如OR,AND,XOR或移位? IE将向右移动一次总是偏离最低位? 4)我对此表示怀疑,但是.Net框架的不同版本的endian-ness存在差异吗? 我假设他们都是一样的,但我已经学会停止假设一些较低级别的细节,比如这个。 如果需要,我可以问这些不同的问题,但我认为任何知道其中一个答案的人可能都知道所有人的答案(或者可以指出我的方向)。

使用16位字更快地在C#中交换字节序

必须有一个更快更好的方法来交换16位字的字节然后这个: public static void Swap(byte[] data) { for (int i = 0; i < data.Length; i += 2) { byte b = data[i]; data[i] = data[i + 1]; data[i + 1] = b; } } 有没有人有想法?

从byte 创建AudioClip

我有问题。 我使用sqlite来存储声音。 我在byte []中得到声音。 然后将byte []转换为float []: private float[] ConvertByteToFloat(byte[] array) { float[] floatArr = new float[array.Length / 4]; for (int i = 0; i < floatArr.Length; i++) { if (BitConverter.IsLittleEndian) Array.Reverse(array, i * 4, 4); floatArr[i] = BitConverter.ToSingle(array, i * 4); } return floatArr; } float[] f = ConvertByteToFloat(bytes); 然后创建AudioClip: AudioClip audioClip = AudioClip.Create(“testSound”, […]

在C#中读取大端数据的有效方法

我使用以下代码使用BinaryReader读取BigEndian信息,但我不确定它是否是有效的方法。 有没有更好的解决方案? 这是我的代码: // some code to initialize the stream value // set the length value to the Int32 size BinaryReader reader =new BinaryReader(stream); byte[] bytes = reader.ReadBytes(length); Array.Reverse(bytes); int result = System.BitConverter.ToInt32(temp, 0);