我以前从未接触过这个问题。我需要将销售额(48.58)转换为4字节数组并使用网络字节顺序。下面的代码是我如何做的,但它是错误的,我不明白为什么。有人可以帮忙吗?
float saleamount = 48.58F;
byte[] data2 = BitConverter.GetBytes(saleamount).Reverse().ToArray();
我得到的是阵列中的66 66 81 236。我不确定它应该是什么。我正在与信用卡终端接口,需要以“4字节,固定长度,最大值为0xffffffff,使用网络字节顺序”发送金额
答案 0 :(得分:0)
big-endian的网络字节顺序伪同义词,因此(如已经提到的meme86)所以你可以检查BitConverter.IsLittleEndian:
float saleamount = 48.58F;
byte[] data2 = BitConverter.IsLittleEndian
? BitConverter.GetBytes(saleamount).Reverse().ToArray()
: BitConverter.GetBytes(saleamount);
但是如果你不知道这一点,可能你已经使用了一些处理它的协议。
答案 1 :(得分:0)
您应该问的第一个问题是,"什么数据类型?" IEEE单精度浮点?二进制补码整数?它是一个整数,隐含的比例是多少? $ 48.53代表4,853
或485,300
?
货币价值由隐含为+2或+4的隐含的整数表示并不罕见。在您的示例中,$ 48.58将表示为整数值4858
或0x000012FA
。
一旦你确定了他们真正想要的东西......使用endian-aware BitConverter或BinaryWriter来创建它。 Jon Skeet's MiscUtil,例如提供:
EndianBinaryReader
EndianBinaryWriter
BigEndianBitConverter
LittleEndianBitConverter
还有其他实现。 See my answer问题" Helpful byte array extensions to handle BigEndian data"链接到一些。
代码你不能写下你不必维护的代码。