【问题标题】:Flip a Hex String翻转十六进制字符串
【发布时间】:2013-09-20 17:56:45
【问题描述】:

根据Split a Hex String without spaces and flip it这里提出的另一个问题,我在这里更清楚地写了这个新问题。

我有一个这样的十六进制字符串:

Hex_string = 2B00FFEC

我需要将十六进制字符串的顺序更改为从最新字符开始,所以这将是这样的:

Fliped_hex_string = ECFF002B

在另一个问题中,我询问了一种使用 .split() 方法来实现此目的的方法。但是应该有另一种方法可以更好地实现这一点。

【问题讨论】:

  • Hex_string 代表什么;长(即 64 位)?
  • 总是偶数个字符?
  • 试试吧:Fliped_hex_string = new StringBuilder(Hex_string).reverse().toString();
  • @YoannHercouet 不,这行不通。
  • 是的,以前不是。现在 OP 编辑​​了帖子。

标签: java android string flip


【解决方案1】:

尽可能简单

    String s = "2B00FFEC";
    StringBuilder  result = new StringBuilder();
    for (int i = 0; i <=s.length()-2; i=i+2) {
        result.append(new StringBuilder(s.substring(i,i+2)).reverse());
     }
    System.out.println(result.reverse().toString());   //op :ECFF002B

【讨论】:

  • 不错的简单 n 短
【解决方案2】:

OP 在 cmets 中将字符长度限制为正好 8 个字符

纯数字答案(灵感来自转换字节顺序的习语);保存往返字符串

n 是一个int

int m = ((n>>24)&0xff) |       // byte 3 to byte 0
        ((n<<8)&0xff0000) |    // byte 1 to byte 2
        ((n>>8)&0xff00) |      // byte 2 to byte 1
        ((n<<24)&0xff000000);  // byte 0 to byte 3

如果您需要将其转换为十六进制,请使用

String s = Integer.toHexString(m);

如果您需要从十六进制设置n,请使用

int n = (int)Long.parseLong(hex_string, 16);

hex_string 是您的初始字符串。您需要通过 Long 解析器来允许否定。

【讨论】:

  • 对不起我的无知@Bathsheba,我是android的新手,但我不知道如何使用它。我在哪里使用我的字符串Hex_string
  • @maxmic_87,我现在在答案末尾附上设置代码。
【解决方案3】:

你可以这样做:

String a = "456789AB";
char[] ca = a.toCharArray();
StringBuilder sb = new StringBuilder(a.length());
for (int i = 0; i<a.length();i+=2)
{
  sb.insert(0, ca, i, 2);
}

如果需要,这也可以扩展到更长的字符串

【讨论】:

    【解决方案4】:

    也许你应该尝试像这样简单的事情:

    public static String flip(final String hex){
        final StringBuilder builder = new StringBuilder(hex.length());
        for(int i = hex.length(); i > 1; i-=2)
            builder.append(hex.substring(i-2, i));
        return builder.toString();
    }
    
    public static void main(String args[]){
        System.out.println(flip("2B00FFEC"));
    }
    

    输出为:ECFF002B

    下次您提出问题时,也许您应该向我们展示一些您编写的用于解决问题的代码(然后问我们为什么您的代码不起作用,而不是您的问题)。您不会从我们那里学到任何任何东西,只是在您不知道它们是如何工作的情况下提供答案。

    【讨论】:

      【解决方案5】:

      这个方法似乎做你想做的事

      String changeHexOrder(String s) {
          char[] arr = s.toCharArray();
          char tmp;
          //change positions of [i, i + 1 , , , , , ,length - i - 2, length - i - 1]
          for (int i = 0; i < arr.length / 2; i += 2) {
              tmp = arr[i];
              arr[i] = arr[arr.length-i-2];
              arr[arr.length-i-2] = tmp;
      
              tmp = arr[i+1];
              arr[i+1] = arr[arr.length-i-1];
              arr[arr.length-i-1] = tmp;
          }
          return new String(arr);
      }
      

      【讨论】:

        【解决方案6】:

        这对我有用

            StringBuilder lsbToMsb=new StringBuilder();
        
            for(int i=input.length();i>0;i-=2)
            {
                lsbMsb.append(lsbToMsb.substring(i-2,i));
            }
        
        
            String lsbMsb=lsbMsb.toString();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-01-31
          • 2012-08-15
          • 2017-03-22
          • 1970-01-01
          • 2019-07-27
          • 2018-01-22
          • 1970-01-01
          相关资源
          最近更新 更多