【问题标题】:How to convert an integer value into 'n' digit ascii byte array in java如何在java中将整数值转换为'n'位ascii字节数组
【发布时间】:2016-05-27 06:49:02
【问题描述】:

在java中将整数值转换为'n'位ascii字节数组的任何方法。喜欢

IntToBytes( int value, int digits );

int a = 1234;
IntToBytes( a, 4 );
results will be byte array of {1, 2, 3, 4}

IntToBytes( a, 5 );
results will be byte array of {0, 1, 2, 3, 4}

我在互联网上搜索没有找到方法。请帮帮我

【问题讨论】:

  • 数学将是一种快速的好方法
  • @KevinEsche 你的意思是“分而治之”的方法吗
  • 请注意'a'等不是bytes,它们是chars。你是说(byte) 0,还是(byte) '0',还是别的什么?
  • 你的意思是字符数组? ascii 是映射到特定数字的符号。以及您期望输入的输出:IntToBytes(a, 7)?
  • @AndyTurner 我编辑了问题

标签: java android type-conversion


【解决方案1】:

如果你想获得一个十进制数字值的数组,你可以创建一个这样的函数:

public static byte[] intToBytes(int number, int digits) {
    byte[] results = new byte[digits];
    /* Start at the end of the array. i.e. 1234, should be converted to {1, 2, 3, 4} */
    for (int i = digits - 1; i >= 0; i--) {
        results[i] = (byte) (number % 10);
        number = number / 10;
    }
    return results;
}

如果你想要的是一个包含每个数字的ascii值的数组,你可以使用String.format并将String转换为字节数组。

(1234 应转换为 {'1', '2', '3', '4'}。ascii 值为 {49, 50, 51, 52}

代码可能是:

public static byte[] intToBytes(int number, int digits) {
    String format = "%0" + digits + "d";
    String numberAsString = String.format(format, number);
    char[] numberAsCharArray = numberAsString.toCharArray();
    byte[] result = new byte[digits];
    for (int i = 0; i < numberAsCharArray.length; i++) {
        result[i] = (byte) numberAsCharArray[i];
    }
    return result;
}

【讨论】:

  • 对我来说很好的解决方案!
【解决方案2】:

在 apache commons lang 中有类 org.apache.commons.lang3.Conversion,它的方法是 longToByteArray。这可能对您尝试做的事情有所帮助。

【讨论】:

    【解决方案3】:

    我认为您的确切问题是如何将 int 数字表示形式转换为一系列十进制数字。

    我不知道有任何现有(即库)方法用于此,但您可以使用其中一种显而易见的方法轻松编写自己的方法。其中之一是重复地从除法中取余数(又名霍纳的方法)。另一种可能是将int 转换为String,然后通过强制转换将此Strings 字符转换为bytes

    【讨论】:

    • 最快的是byte digit = a - a / 10。记得在每次迭代后用/= 10修改a
    • @LukeSamuel 'byte digit = a - a / 10' 是什么意思
    • @Krishna:Luke Samuel 的意思是霍纳的方法;看到我的帖子和谷歌这个名字。
    • 我的错,应该只是byte digit = a - a / 10 * 10a % 10
    【解决方案4】:

    你可以使用String.format()函数

    这个例子可能对你有帮助

        String s = String.format("%06d", 1234);
        System.out.println(s.toCharArray());
    

    希望对你有所帮助

    【讨论】:

      【解决方案5】:

      直接来自我的项目 Euler 库。 :)

      算法执行mod 10 得到最后一位数字,然后除以10shift 右边的数字并删除最后一位数字。这重复直到零。在我的算法中,我返回一个数组,所以我使用log10 来获取确切的位数。您可以选择将其粘贴在 while 循环中并除以 10 直到等于 0 并将 mod 10 附加到列表中。

      public static int[] getDigits(long n) {
          final int digits = numDigits(n);
          final int[] d = new int[digits];
          int i = 0;
          while (n > 0) {
              d[i] = (int)(n % 10);
              n /= 10;
              i++;
          }
          return d;
      }
      
      public static int numDigits(final long n) {
          return (int) Math.log10(n) + 1;
      }
      

      调整它以返回一个字节数组应该很简单。

      【讨论】:

        【解决方案6】:

        我认为你应该使用模运算。 您必须创建一个数字大小的 char 数组,然后从末尾迭代,在该位置插入 value%10 - '0'(最后一位转换为 char),并在每次迭代中将值除以 10。当 value = 0 时,您只需将 '0' 插入其余位置。

        【讨论】:

          猜你喜欢
          • 2017-06-27
          • 2014-12-27
          • 2011-08-06
          • 2021-01-24
          • 1970-01-01
          • 2010-12-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多