我想将当前时间设置为信标的主要值和次要值。让我们假设这是当前时间1465398279009
。我希望9827
是主要的值,并且9009
是未成年人的值。我使用java代码来调用shell脚本。这是我的java代码
Long millis = System.currentTimeMillis();
String time=Long.toString(millis);
// String major1=time.substring(...);
String major1="99";
String major2="99";
String minor1="99";
String minor2="99";
ProcessBuilder pb2=new ProcessBuilder("/test.sh");
pb2.environment().put("major1", major1);
pb2.environment().put("major2", major2);
pb2.environment().put("minor1", minor1);
pb2.environment().put("minor2", minor2);
Process script_exec = pb2.start();
这是test.sh的内容
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d sd fh fb 33 j2 k9 j9 23 h2 n9 g7 v7 $param1 $major1 $major2 $minor1 $minor2 c5 00
在此示例中,我只是尝试将两个值都放到9999
和9999
,但我得到39321
,我认为这些值会转换为大端。我感到困惑,我不清楚哪种类型,以及如何转换字符串。
答案 0 :(得分:0)
Long.toString
可以带两个参数。第一个参数是数字,第二个参数是转换的基数。
使用16(Long.toString(millis, 16)
)的基数将导致使用[1-9a-f]的标准十六进制字符串。
答案 1 :(得分:0)
试试这个:
String major1 = String.format("%02X", (millis >> 32) & 0xff);
String major2 = String.format("%02X", (millis >> 16) & 0xff);
String minor1 = String.format("%02X", (millis >> 8) & 0xff);
String minor2 = String.format("%02X", millis & 0xff);
上面的代码访问时间戳中的每个字节并将其分配给正确的字段,然后将其格式化为两个字符(一个字节)十六进制数。两个字符的十六进制数字是您想要的脚本。