【问题标题】:How can I add two Strings containing hexadecimal-numbers without converting them to int?如何添加两个包含十六进制数字的字符串而不将它们转换为 int?
【发布时间】:2020-01-05 16:39:47
【问题描述】:

我在一个字符串中有一个十六进制数字,它太大而无法转换为 int 和 long,我想添加另一个十六进制数字的值。 所以假设我有这个号码:

String hex1 = "0xf27f2029f9c103f77be78b9591c1ab27167858d27d789cd3ea8a270c67ea5d91";

并想补充:

int hex2 = 0x1;  or  String hex2 = "0x1";

我知道这个问题已经被问过How to subtract or add two hexadecimal value in java,但答案对我不起作用,因为它们都涉及到 int 的转换。

【问题讨论】:

  • 因此将它们转换为 BigInteger。 docs.oracle.com/javase/8/docs/api/java/math/…
  • 如果您String 转换为整数类型,那么添加这两个String(s) 将得到"0xf27f2029f9c103f77be78b9591c1ab27167858d27d789cd3ea8a270c67ea5d910x1" - 我敢打赌你不想要。

标签: java hex


【解决方案1】:

你可以这样做:

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        String hex1 = "0xf27f2029f9c103f77be78b9591c1ab27167858d27d789cd3ea8a270c67ea5d91";
        String hex2 = "0x1";
        System.out.println(
                "In decimal: " + new BigInteger(hex1.substring(2), 16).add(new BigInteger(hex2.substring(2), 16)));
        System.out.println("In hexdecimal: "
                + new BigInteger(hex1.substring(2), 16).add(new BigInteger(hex2.substring(2), 16)).toString(16));
    }
}

输出:

In decimal: 109684320921920394042076832992416841330182602685967688614501993994243850001810
In hexdecimal: f27f2029f9c103f77be78b9591c1ab27167858d27d789cd3ea8a270c67ea5d92

【讨论】:

    【解决方案2】:

    将您的代码更改为:

    String hex1="0xf27f2029f9c103f77be78b9591c1ab27167858d27d789cd3ea8a270c67ea5d91";
    int hex2=0x1;
    string hex2="0x1";
    

    您需要 "" 来输入字符串的值。

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 2016-06-13
      • 1970-01-01
      • 2012-10-11
      • 2011-01-17
      • 1970-01-01
      • 2014-03-19
      • 2013-02-07
      相关资源
      最近更新 更多