【问题标题】:RxAndroidBle, value should be in HexadecimalRxAndroidBle,值应为十六进制
【发布时间】:2019-01-13 05:16:48
【问题描述】:

通知中的值应该是十六进制,但我得到十进制和负值(使用另一个应用程序我得到了良好的格式):

123 0 0 72 98 0  
124 0 0 39 97 0   
125 0 0 -2 95 0 
126 0 0 -50 94 0 
127 0 0 -105 93 0  
-128 0 0 88 92 0  
-127 0 0 18 91 0  
-126 0 0 -59 89 0 
-125 0 0 113 88 0 
-124 0 0 22 87 0 
-123 0 0 -76 85 0  
-122 0 0 76 84 0  
-121 0 0 -35 82 0  
-120 0 0 103 81 0

你知道我怎样才能得到这个十六进制形式吗?

最好的问候

【问题讨论】:

    标签: arrays hex rxandroidble


    【解决方案1】:

    RxAndroidBle 库在收到通知时会发出 byte[]。单个 byte 值可以用不同的方式表示。

    您提供的日志只是根据 Java 规范打印原始值。 Java 没有无符号值的概念,每个以1 位开头的值都被视为负数。即0xA2 等价于-94(0xA2 == -94) == true

    将值显示为十六进制的一种简单方法是使用String.format(),即String.format("0x%2xh", byteValue)

    您很可能想问一个问题:How to convert a byte array to a hex String in Java

    【讨论】:

      【解决方案2】:

      我写了一个小方法来将一个 byte[] 转换成一个类似于 [02 FC 41 5A] 等的字符串:

      static String byteArrayToHexDigits(final byte[] bytes) {
              int i;
              StringBuilder result = new StringBuilder( "[" );
              for( i = 0; i < (bytes.length-1); i++ ) {
                  result.append(String.format( "%02X  ", bytes[i] ));
              }
              result.append(String.format( "%02X]", bytes[i] ));
              return result.toString();
          }
      

      【讨论】:

      • 请注意,如果 byte[] 没有至少 2 个元素,这将失败。
      猜你喜欢
      • 2018-07-26
      • 1970-01-01
      • 2014-02-05
      • 2011-08-04
      • 2018-01-22
      • 2016-07-25
      • 1970-01-01
      相关资源
      最近更新 更多