【问题标题】:Converting an integer in String form to char octets将字符串形式的整数转换为字符八位字节
【发布时间】:2013-03-04 18:29:45
【问题描述】:

我需要一些关于 Java 程序的帮助。

我正在尝试获取包含整数的字符串并将其转换为更紧凑的存储格式,即将打印到文件中的几个八位字节字符。读取文件时,它应该能够获取字符并组合它们的值以获取原始 int。有没有办法做到这一点?还是我误会了什么?

【问题讨论】:

    标签: java encoding ascii


    【解决方案1】:

    使用Integer.toOctalString(Integer.parseInt([String Value]))。这会给你一个八进制字符串。 要取回整数,请使用Integer.parseInt([Octal string],8);

    【讨论】:

      【解决方案2】:

      所以你有一个真正包含像“12345”这样的int的字符串,你想把它紧凑地写在一个文件中。

      首先,将字符串转换为 int:

      int value = Integer.valueOf(string);
      

      然后你要么将其转换为带有 ByteBuffer 的字节数组:

      ByteBuffer b = ByteBuffer.allocate(4);
      b.putInt(value);
      byte[] result = b.array();
      

      或者你只是把它写在一个文件中:

      FileOutputStream fos = new FileOutputStream(f);
      ObjectOutputStream oos = new ObjectOutputStream(fos);
      oos.writeInt(value);
      

      编辑:既然你还有困难,这里是一个完整的例子:

      public class Snippet {
      
        public static void main(String[] args) {
          int value = Integer.parseInt("1234567890");
      
          ByteBuffer b = ByteBuffer.allocate(4);
          b.putInt(value);
          byte[] result = b.array();
      
          System.out.println(result.length);  // 4
          System.out.println(Arrays.toString(result)); // [73, -106, 2, -46]
        }
      }
      

      【讨论】:

      • 我试过了,但它只为“1234567890”写了一个字符
      • 我已经用一个完整的例子更新了我的答案。这应该有效。如果您仍然无法使您的代码工作,请尝试发布SSCCE
      • 我使用 ByteBuffer 将值打印到文件中,它似乎可以工作。该文件包含四个字符“I–Ò”(在“-”和“Ò”之间有一个非打印字符)。现在我需要能够从文件中读回它并获取原始字符串。我该怎么做?
      【解决方案3】:

      试试

      Integer.valueOf(yourstring)
      

      【讨论】:

        【解决方案4】:

        你可以使用

        public static String toHexString(int i)
        

        和

         public static int parseInt(String s, int radix)
        

        以 16 为基数作为将字符串“压缩”为十六进制的一种方式。

        如果文件是二进制文件,您也可以只对整数本身使用序列化方法。

        【讨论】:

          【解决方案5】:

          将字符串转换为 int 使用

          int i = Integer.parseInt(String)
          

          将int 保存到文件的最简洁方式是二进制表示

          java.io.DataOutputStream.writeInt(i);
          

          把它读回来

          int i = java.io.DataInputStream.readInt();
          

          【讨论】:

          • 它似乎工作正常,但它只打印字符串“1234567890”的一个字符。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-06
          • 2012-05-06
          • 1970-01-01
          • 2015-09-16
          相关资源
          最近更新 更多