【问题标题】:byte[] toString() gives a weird string instead of actual valuebyte[] toString() 给出一个奇怪的字符串而不是实际值
【发布时间】:2017-10-04 11:59:49
【问题描述】:

byte[] a 的值为 {119},这是“w”的 ascii 等价物,但是当我使用 .toString() 将其转换为字符串时,它给了我一个奇怪的字符串。知道我做错了什么吗?

byte[] a = characteristicRX.getValue();
        String rscvString = a.toString();
        Log.d("byteToHex", "rscvString = " + rscvString);
        while ( rscvString != "w" ){

【问题讨论】:

  • 检查所需的编码并根据需要使用new String(a, someEncoding) 成语进行参数化。 Edit 实际上你是在一个数组上调用toString,所以打印的是对象类型和散列。以上仍然有效。
  • 检查您收到的警告,它可能在说同样的事情。
  • String s = new String(a);
  • 谢谢大家!它现在可以工作了:)

标签: java android string byte


【解决方案1】:

String 对象将参数byte[] 作为重载构造函数。使用String rscvString = new String(a);,你应该被排序

您不能使用布尔运算符来测试字符串,即。 != 或 ==。 使用while ( !(rscvString.equalsIgnoreCase("w") ) equalsIgnoreCase() 方法将返回一个布尔值和!将强制对错误进行测试。

【讨论】:

  • 谢谢!该字符串现在具有正确的值! rscvString 现在是 "w",但不知何故,程序仍然进入 while(rscvString != "w") 循环。知道这次有什么问题吗?
  • 您不能使用boolean 运算符来测试字符串,即。 !===。使用while ( !(rscvString.equalsIgnoreCase("w") ) equalsIgnoreCase() 方法将返回boolean 和!将强制对 false 进行测试。
  • 忘了提到equals()也可以使用,但这会导致它区分大小写。使用boolean 运算符进行测试比较的是内存位置,而不是值。
  • 谢谢!它现在应该正常工作:) 已编辑,因此两个答案都在一起。再次感谢!
【解决方案2】:

尝试以下任一行将字节转换为字符并将其转换为字符串

String rscvString = String.valueOf((char) a);
String rscvString = String.valueOf((char) (a & 0xFF));

您可以在 String 构造函数中传递一个字节数组来获取数组的 String 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2018-01-19
    • 2018-12-17
    • 2013-07-27
    相关资源
    最近更新 更多