【问题标题】:How can I write 7 byte Integer value to DataOutputStream, which contains 15 digits?如何将 7 字节整数值写入包含 15 位的 DataOutputStream?
【发布时间】:2011-11-02 23:49:29
【问题描述】:

我必须将 7 字节的整数值写入 DataOutputStream,这个整数包含 15 位数字。我该怎么做?

【问题讨论】:

  • 在什么基数中?二进制?十进制?八进制?十六进制? Base64?压缩十进制?分区小数?
  • 在Java中如何获得一个7字节的整数值?
  • @EJP 十进制。基本上我必须发送一个包含 15 位数字的值,并且它必须是 7 字节值
  • @Gonzo 它必须是压缩十进制:每个字节两位。您将必须首先理清您的要求。然后,如果它是压缩十进制,您将不得不告诉我们您使用的哪种压缩十进制格式:无符号、符号前导、符号尾随。然后告诉我们这个值目前在你的 Java 代码中是如何表示的。
  • 转换为长字节并截断高字节。如果它需要是可显示的字符,那么在先转换为 long 之后,就需要类似 Base64 的东西。

标签: java integer byte dataoutputstream


【解决方案1】:

7 字节 = 56 位
这意味着您最多可以表示 2^56 的数字,这对于 15 位长数字来说是不必要的。

只需将数字转换为二进制并将其存储在您发送的那 7 个字节中。

【讨论】:

  • @Gonzo 正如您所标记的这个答案是正确的,十进制基数根本不可能是一个要求,这与您上面令人困惑的回答相反。
【解决方案2】:

7 bytes = 56 bits,可以用long存储15位整数

并将其转换为字节:

long val = ...
byte [] b = new byte[7];  
for(int i=0;i<7;i++){  
    b[7 - i] = (byte)(val >>> (i * 8));  
}  

/手写,可能会弄乱索引或移位/

【讨论】:

    猜你喜欢
    • 2016-02-23
    • 2012-02-18
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2017-03-22
    • 1970-01-01
    相关资源
    最近更新 更多