【问题标题】:How to complement bytes in java?如何在java中补充字节?
【发布时间】:2011-11-07 13:40:57
【问题描述】:

我需要补充字符串二进制文件。

st=br.readLine() //I used readline to read string line

byte[] bytesy = st.getBytes(); //and put it to bytes array.

现在我如何补充字节的二进制等效项(或如何将其异或到 11111111)?

预期输出:

如果 st 的第一个字符是 x,那么二进制等价物是 01111000

并且输出必须是 10000111 通过补码(或异或到 11111111)

【问题讨论】:

  • java中的异或运算符是'^'
  • 使用 reader 和 readLine 读取二进制数据很奇怪。此外,getBytes 使用平台的默认编码。您可能必须指定一种编码才能将字符串转换为字节并使代码具有可移植性。
  • 但我不知道如何异或到 11111111。因为..你知道如何将字符串“11111111”转换为字节吗?
  • 不要使用String.getBytes()而不指定编码。它将使用平台默认值,这几乎肯定不是您想要的。请提供有关您真正想要实现的目标的更多信息。
  • 我需要将字符串的每一个字符异或到 11111111(binary) 以补充 char 二进制文件。

标签: java binary byte xor


【解决方案1】:

要补足一个字节,您可以使用~ 运算符。因此,如果 x 是 01111000,那么 ~x 是 10000111。对于 XORing,您可以使用 x ^= 0xFF(11111111b == 0xFF in hex)

【讨论】:

    【解决方案2】:

    您需要编写一个循环来一次执行一个字节。

    【讨论】:

      【解决方案3】:

      如果您有二进制数字,例如“111111”,您可以在不将其转换为数字的情况下执行二进制恭维。你可以这样做。

      BufferedReader br = 
      int ch;
      while((ch = br.read()) >= 0) {
         switch(ch) {
            case '0': ch = '1'; break;
            case '1': ch = '0'; break;
         }
         System.out.print(ch);
      }
      

      【讨论】:

        猜你喜欢
        • 2019-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-06
        • 2011-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多