将金额转换为4字节数组

时间:2014-06-04 22:20:22

标签: c#

我以前从未接触过这个问题。我需要将销售额(48.58)转换为4字节数组并使用网络字节顺序。下面的代码是我如何做的,但它是错误的,我不明白为什么。有人可以帮忙吗?

float saleamount = 48.58F; 
byte[] data2 = BitConverter.GetBytes(saleamount).Reverse().ToArray();

我得到的是阵列中的66 66 81 236。我不确定它应该是什么。我正在与信用卡终端接口,需要以“4字节,固定长度,最大值为0xffffffff,使用网络字节顺序”发送金额

2 个答案:

答案 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,853485,300

货币价值由隐含为+2或+4的隐含的整数表示并不罕见。在您的示例中,$ 48.58将表示为整数值48580x000012FA

一旦你确定了他们真正想要的东西......使用endian-aware BitConverter或BinaryWriter来创建它。 Jon Skeet's MiscUtil,例如提供:

  • EndianBinaryReader
  • EndianBinaryWriter
  • BigEndianBitConverter
  • LittleEndianBitConverter

还有其他实现。 See my answer问题" Helpful byte array extensions to handle BigEndian data"链接到一些。

代码你不能写下你不必维护的代码。