gpt4 book ai didi

java - 从数字转换为六进制字母?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:12:21 25 4
gpt4 key购买 nike

我正在尝试使用 JExcel 重新排序某些 Excel 列。我还需要找到对其他单元格的引用,然后重新映射它们以引用正确的单元格。我觉得我已经做了很多艰苦的工作,但我遇到了一个绊脚石。

我在 wikipedia 上找到了这段代码,从 SO 链接到:

 public static String toBase26(int number){
number = Math.abs(number);
String converted = "";
// Repeatedly divide the number by 26 and convert the
// remainder into the appropriate letter.
do
{
int remainder = number % 26;
converted = (char)(remainder + 'A') + converted;
number = (number - remainder) / 26;
} while (number > 0);

return converted;
}

但是当我将数字 35 放入其中时,会发生以下情况:

  1. = 35
  2. 剩余 = 9
  3. 转换= char(9+'A')+""= J
  4. = (35-9)/26 = 1
  5. 1>0
  6. 剩余 = 1
  7. char(1+'A') = B
  8. 转换= char(1+'A')+"J"= BJ

这在某种程度上是预期的,因为基数 10 (35) = 基数 26 (19)。但我实际上想引用 AJ 列。

我无法弄清楚我需要做出哪些改变才能得到正确的字母。每当我尝试在纸上解决问题时,我最终都会毁掉之前提取的字母。例如,我不认为 this会起作用,因为这意味着我第一次将 remainder 设为 8,然后将其转换为 I,除非我遗漏了什么?

如有任何帮助,我们将不胜感激。我环顾四周,在这上面浪费了足够多的时间。我只是需要一些帮助来让它工作。

最佳答案

这个“十六进制系统”背后的绊脚石是它有一个 0,但单位列跳过了 0,并且范围仅从 A-Z。考虑以下十进制转换:

A 1 (0*26 + 1)
...
Z 26 (0*26 + 26)
AA 27 (1*26 + 1)
...
AZ 52 (1*26 + 26)
BA 53 (2*26 + 1)
...
BZ 78 (2*26 + 26)
CA 79 (3*26 + 1)
...
ZZ 702 (26*26 + 26)
AAA 703 (1*26*26 + 1*26 + 1)

看到问题了吗?十六进制数中缺少“零”:

00A 1
...
00Z 26
0AA 27
...
0AZ 52
0BA 53
...
0BZ 78
0CA 79
...
0ZZ 702 (26*26 + 26)
AAA 703 (1*26*26 + 1*26 + 1)

但是,单位列从来没有零!

显然我们不会打印这些零,但它应该有助于您了解哪里出了问题。


这是我们的算法。我在假设十进制 0 = 十六进制 A、1 -> B、25 -> Z、26 -> AA 等的假设下编写算法,因为它让我更容易理解。如果这不是您想要的假设,则只需在运行代码之前减去 1 :)

0. If number =< 0, return.

1. Modulo by 26. Convert 0-25 to 'A'-'Z'. //This is our units column.

Loop {

2. Divide the number by 26 (integer division rounding down).

3. If number =< 0, return.

4. Modulo by 26. Convert 0-25 to 'Z','A'-'Y'. //This is our next column (prepend to string output).

}

例子

转换十进制 730 -> ABC 六位数

730 的模数乘以 26 = 2 -> 单位列的“C”

730 除以 26 = 28

模 28 乘以 26 = 2 -> 'B' 表示十列

28 除以 26 = 1

模 1 乘以 26 = 1 -> 'A' 代表百列

1 除以 26 = 0

数字为空,因此返回'ABC'

关于java - 从数字转换为六进制字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16190452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com