从 char 转换为 long

Converting from a char to a long

我正在创建一个大整数 class。我读入了两个 long 作为函数参数,我想做的是让 long 读入的每个数字占据数组的一个索引。

我通过将 long 转换为字符串然后转换为 char 数组并将它们临时存储在某个地方来完成此操作。这工作正常,当打印出来时,打印出来的数字与读入的数字完全一样。现在我想做的是将它们添加到一个新数组中,并将它们的数据类型设置为 long。我做了两个数组来处理这个问题。

问题是当我尝试将 char 转换为 long 时,它给了我一个完全不同的值。似乎它正在将 char 转换成它自己的相应数字?字符 class 似乎没有任何方法可以转换为 long。

最好的方法是什么?

编辑:似乎如果我将长数组更改为 int 数组然后使用 Character.getNumericValue(char ch) 它可以正确地将它添加到数组中。

既然我计划在这个函数的末尾返回一个 long,我是否应该确保这些数组是 long 以确保安全?或者将它们作为整数存储在数组中就可以了?谢谢

public static long hugeMultiplication(long value1, long value2){
    System.out.println("originalvalue: "+value1);
    int lengthOfWordOne = String.valueOf(value1).length();
    int lengthOfWordTwo = String.valueOf(value1).length();
    System.out.println("length1: "+lengthOfWordOne);
    System.out.println("length2: "+lengthOfWordTwo);

    long[] numberOne = new long[lengthOfWordOne+1];
    long[] numberTwo = new long[lengthOfWordTwo+1];

    //make those longs into string to convert char array
    char[] tempValueOne = String.valueOf(value1).toCharArray();
    char[] tempValueTwo = String.valueOf(value2).toCharArray();

    //copy each value of a char array to long array and change to long again
    //this will set up the array having each number in it so we can do the multiplication
    for (int i = 0; i < tempValueOne.length; i++){
        numberOne[i] = (long) tempValueOne[i];
    }


    for (int i = 0; i < numberOne.length; i++){
        System.out.print(numberOne[i]);
    }

long one = Character.getNumericValue('1');

http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#getNumericValue%28char%29

charlong 之间唯一真正的区别是数据大小。 char 通常是 1 个字节,而 long 通常是 8 个字节。当您将 long 转换为 string 时,您正在创建一个表示该数字的 ASCII 字符数组。例如,long 12345 在内存中将表示为:

00000000 00000000 00000000 00000000 00000000 00000000 00110000 00111001

但是当转换为 string(1 字节 char 的数组)时,它看起来更像这样:

00110001 00110010 00110011 00110100 00110101

其中每个字节都是字符串中的一个字符。第一个字节是 ASCII“1”、“2”等

当您将每个 char 转换回 long 时,您实际上是在获取字符串中每个字符的 ASCII 值。所以 char '1' 在内存中实际上表示为整数 49,'2' 是 '50',依此类推。您需要做的是将整个字符串转换回整数表示形式。