【问题标题】:Getting byte value for numbers between 0 and 255?获取 0 到 255 之间数字的字节值?
【发布时间】:2013-03-03 22:51:20
【问题描述】:

我需要获取 0 到 255 之间数字的字节/8 位表示形式。在 Java 中是否有任何舒适的方法可以做到这一点?似乎大多数方法都适用于 4 字节长的整数?我的最终目标是将几个 8 位值写入一个文件。

感谢您对此的任何提示!

【问题讨论】:

    标签: java file byte


    【解决方案1】:

    完成亚历克斯的回答:

    int i = 255;
    byte b = (byte) i;
    System.out.println("b = " + b); // b = -1
    int i2 = b & 0xFF;
    System.out.println("i2 = " + i2); // i2 = 255
    

    【讨论】:

      【解决方案2】:

      小心字节。它是签名,例如-128 到 127。如果你想要 0-255,当你打印出来时,你总是需要&255(就像 JB Nizet 在他的例子中所做的那样)

      【讨论】:

        【解决方案3】:

        byte 类型有什么问题?如果您只存储数据而不进行算术运算,并且出于其他原因不需要十进制表示,那么它是否已签名并不重要。

        【讨论】:

        • 对于 necropost 很抱歉,但举个例子,Java 的 Color 对象需要 0-255 之间的数字。如果您正在处理非常复杂的事情,并且需要这些数字的大量列表,则将它们存储为字节列表比整数列表更有效。
        【解决方案4】:

        1 字节 = 8 位 = 00000000~11111111(二进制)= 0~255(无符号字节) = 0x00~0xFF(十六进制)

        C#:

        1字节值是:0~255

        Java:

        1字节值是:-128~127

        如果你想在java中得到0~255(无符号字节)的值:

        字节 b = (字节) 值;

        示例:字节 b = (字节) 200;

        int b = 值 & 0xFF;

        示例:int b = 200 & 0xFF;

        【讨论】:

          【解决方案5】:

          如果您要将其读入int,只需使用& 0xff 将其屏蔽。我建议在(In|Out)putStream 之间增加一层间接性。涵盖诸如字节顺序之类的细节。

          在写入对象中:

          public void unsignedByte(int value) throws IOException {
              if (!(0 <= v && v <= 0xff) {
                  throw IllegalArgumentException();
              }
              out.write(v);
          }
          

          在读取对象中:

          public int unsignedByte() throws IOException {
              int v = in.read();
              if (v == -1) {
                  throw EndOfFileException();
              }
              assert 0 <= v && v < 0xff; 
              return v;
          }
          

          【讨论】:

            【解决方案6】:

            Java 字节的符号是从 -128 到 127,如果你想获得从 0 到 255 的表示,我使用这 2 个函数

            public static byte fromIntToByte(String value) throws Exception {
                    return fromIntToByte(Integer.parseInt(value));
                }
            
                public static byte fromIntToByte(int value) throws Exception {
                    String stringByte = "";
                    if (value < 0 && value > 255) {
                        throw new Exception("Must be from 0<=value<=255");
                    }
                    if (value <= 127) {
                        for (int i = 0; i < 8; i++) {
                            stringByte = String.valueOf(value % 2) + stringByte;
                            value = value / 2;
                        }
                    } else {
                        value = value / 2;
                        for (int i = 0; i < 7; i++) {
                            stringByte = String.valueOf(value % 2) + stringByte;
                            value = value / 2;
                        }
                        stringByte = "-" + stringByte;
                    }
                    System.out.println(stringByte);
                    byte b = Byte.parseByte(stringByte, 2);
                    return b;
                }
            

            【讨论】:

            • 这不是一个好的解决方案,甚至也不正确。将一个字节转换为一系列位并通过字符串函数传递它会很慢。
            猜你喜欢
            • 1970-01-01
            • 2014-05-01
            • 1970-01-01
            • 2011-06-26
            • 1970-01-01
            • 1970-01-01
            • 2021-07-06
            • 1970-01-01
            • 2017-07-19
            相关资源
            最近更新 更多