【问题标题】:Cast extended char to int java将扩展字符转换为 int java
【发布时间】:2017-05-17 14:27:48
【问题描述】:

我正在开发一个通过 BLE 接收字符串格式数据的 Android 应用程序。 该字符串包含 HEX 格式的 ADC 值。为了节省存储空间,我每个字节包含两个十六进制值(例如0xED)。但是,我无法从字符串中检索这些值。 所以我需要能够从将每个索引字符一分为二的字符串中获得int[]

目前我尝试获取charAt(index),然后将char 转换为int。但是,这只适用于 ASCII 有效数据。一旦一个字符的数据超过 127,它就会返回异常的默认值。有什么办法可以避免吗?

下面的代码适用于低于 127 的每个值,所以我只需要一个高于 127 的值的解决方案。

for (int i = 0; i < 119; i++) {
            char charTemp1 = datastring.charAt(i);
            int test = charTemp1 & 0xF0;
            int test2 = charTemp1 & 0xF;
            }

【问题讨论】:

  • Parse 基数为 16 的他们
  • 请发送minimal reproducible example。向我们展示创建这样一个字符串的示例代码,以及你卡在哪里。
  • 不要滥用字符串来存储任意字节。这可能在 C 中有效,但在这里不行。
  • 这可能是问题所在,我主要从 C 背景开始。那么,有什么建议吗? String 是由 Android 上的 BLE 示例提供的,所以我想我必须从 String 开始..
  • @ErichKitzmueller 那么在 Java 中的发展方向是什么? :)

标签: java string char int


【解决方案1】:

您可能需要详细说明输入字符串格式的工作原理。您为一个应该包含成对十六进制数字的字符串显示 119 个字符,我不明白这一点。请注意,下面我在代码中给出了一个示例为testVector。你的字符串有什么不同?

public class ParseInt
{
   public static void main(String[] args) {
      String testVector = "EDAB1234";
      System.out.println( Arrays.toString( parseInts(testVector) ) );
   }

   public static int[] parseInts( String hex ) {
      int[] retVal = new int[ hex.length() / 2 ];
      for( int i = 0; i < hex.length()/2; i++ ) {
         retVal[i] = Integer.parseInt( hex.substring( i*2, i*2+2), 16 );
      }
      return retVal;
   }

}

【讨论】:

  • 我的字符串看起来像 "!Ce����" 或 0x21 43 65 87 A9 CB ED 0F。所以字符串中每个字符有 2 个十六进制值
  • 您希望输出是什么?这些不是十六进制数字。
  • 我想分离单个十六进制值
  • 我认为您应该使用其他信息更新您的问题。请为所有内容提供示例。现在你的cmets没有意义。我不明白在这种情况下“分离”是什么意思,或者“十六进制值”是什么。
  • 抱歉有点阴天 :) 所以我想要实现的是一个 int[] 包含(对于我的示例字符串)[2,1,4,3,6,5,8 ,7,10,9,12,11,14,13,0,15]
猜你喜欢
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 2012-11-18
  • 2016-07-07
  • 2021-08-01
  • 1970-01-01
相关资源
最近更新 更多