相关疑难解决方法(0)

C#little endian还是big endian?

在允许我们通过UDP/IP控制它的硬件文档中,我发现了以下片段:

在这种通信协议中,DWORD是4字节数据,WORD是2字节数据,BYTE是单字节数据.存储格式为小端,即4字节(32位)数据存储为:d7-d0,d15-d8,d23-d16,d31-d24; 双字节(16位)数据存储为:d7-d0,d15-d8.

我想知道这是如何转换为C#的?在发送之前我是否必须转换内容?例如,如果我想发送32位整数或4个字符的字符串?

c# hardware udp endianness

62
推荐指数
3
解决办法
9万
查看次数

IsLittleEndian字段报告错误,但它必须是Little-Endian?

我在英特尔计算机(Win7 64位)上运行,根据我读到的,英特尔正在使用Little-Endian.我在C#中尝试使用以下代码:

byte[] b2 = new byte[] { 0, 1 };
short b2short = BitConverter.ToInt16(b2, 0);
Run Code Online (Sandbox Code Playgroud)

和Little-Endian预期的b2short == 256.

然后我在.NET中读到,BitConverter.IsLittleEndian应该反映系统正在使用的endian,当我在Visual Studio中检查变量时,它报告为false,即它不是Little-Endian.

这与64位操作系统有什么关系吗?有任何想法吗?


编辑:我的同事,坐在我对面,做了相同的测试(Win Vista 32位),得到了相同的结果


编辑2:这真的很奇怪.每当我运行代码,并在BitConverter完成它之后中断,IsLittleEndian == false.但是,如果我添加行Console.WriteLine(BitConverter.IsLittleEndian); 之后它是真的:

byte[] b2 = new byte[] { 0, 1 };
short b2short = BitConverter.ToInt16(b2, 0);
Console.WriteLine(BitConverter.IsLittleEndian);
// Now the IsLittleEndian is true
Run Code Online (Sandbox Code Playgroud)

但是,一旦我删除Console.WriteLine命令是假的一次.

我还可以补充一点,即使我在"Console.WriteLine"上打破了IsLittleEndian == true,但如果我完全删除该行则为false.


编辑3:正如Mark Gravell所指出的,这必定是一些时间错误.如果我使用变量BitConverter.IsLittleEndian它被初始化,如果我不(并在破坏时看它)它没有初始化,因此 ...

c# windows-7

20
推荐指数
2
解决办法
3559
查看次数

单声道Endianness

使用.NET的东西相当简单 - 所有(包括ARM ASFAIK)运行小端.

我的问题是:什么是Mono和(可能)大端系统?在Int32/Int64结构中,这些位是反向的(与x86相比)还是框架强制使用小端规则集?

谢谢

.net c# mono endianness

9
推荐指数
2
解决办法
1752
查看次数

使用tcp从java发送到C#的两倍

我有一个Java SocketServer,它将双打发送到C#客户端.服务器发送双打,DataOutputStream.writeDouble()客户端读取双精度BinaryReader.ReadDouble().当我dos.writeDouble(0.123456789);从服务器发送 并刷新它时,客户端读取并输出3.1463026401691E + 151,这与我发送的不同.C#和Java的编码是否各不相同?

.net c# java sockets tcp

5
推荐指数
1
解决办法
592
查看次数

当使用Int32数组初始化时,BitArray以相反的顺序存储位

描述我错过理解的最好方法是使用代码本身:

var emptyByteArray = new byte[2];

var specificByteArray = new byte[] {150, 105}; //0x96 = 150, 0x69 = 105
var bitArray1 = new BitArray(specificByteArray);
bitArray1.CopyTo(emptyByteArray, 0); //[0]: 150, [1]:105

var hexString = "9669";
var intValueForHex = Convert.ToInt32(hexString, 16); //16 indicates to convert from hex
var bitArray2 = new BitArray(new[] {intValueForHex}) {Length = 16}; //Length=16 truncates the BitArray

bitArray2.CopyTo(emptyByteArray, 0); //[0]:105, [1]:150 (inversed, why??)
Run Code Online (Sandbox Code Playgroud)

我一直在读,bitarray从LSB迭代到MSB,那么从十六进制字符串开始初始化bitarray的最佳方法是什么呢?

c# endianness bitarray

2
推荐指数
1
解决办法
2423
查看次数

标签 统计

c# ×5

endianness ×3

.net ×2

bitarray ×1

hardware ×1

java ×1

mono ×1

sockets ×1

tcp ×1

udp ×1

windows-7 ×1