从 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
char
和 long
之间唯一真正的区别是数据大小。 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',依此类推。您需要做的是将整个字符串转换回整数表示形式。
我正在创建一个大整数 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
char
和 long
之间唯一真正的区别是数据大小。 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',依此类推。您需要做的是将整个字符串转换回整数表示形式。