当前位置:首页 » 安卓系统 » android16进制

android16进制

发布时间: 2022-07-05 03:27:38

❶ android 蓝牙如何发送十六进制数据

与蓝牙模块通信最重要的地方就是数据的发送和接收,因为是底层的操作,所以更多是发送16进制数据。
进制转换是我们程序员的必修课,属于基本素质。这里需要的是将字节数组转化为16进制字符串,方法都是通用的:

[java] view plain
public static String bytesToHexString(byte[] bytes) {
String result = "";
for (int i = 0; i < bytes.length; i++) {
String hexString = Integer.toHexString(bytes[i] & 0xFF);
if (hexString.length() == 1) {
hexString = '0' + hexString;
}
result += hexString.toUpperCase();
}
return result;
}

接下来就是发送数据。
发送数据非常简单,之前有关于蓝牙编程的博文已经讲到了,http://www.cnblogs.com/wenjiang/p/3200138.html,这里只讲重要的一点:大容量字节数组的发送。
我们需要发送64个字节的数组,如果一次性发送过去,单片机那里可能无法及时处理以致没有任何回应,因为单片机那里是设置了数据接收的延时时间。要想畅通的与蓝牙模块通信,考虑这个时间差非常重要。调整字节的发送速率,就成为非常关键的一步。值得注意的是,数据的发送是非常快的,就是因为这样才会导致单片机那里无法及时处理,所以,每次发送后的延时是非常重要的。我们单片机那里的延时是10毫秒,所以我们选择发送完每个字节后就延时10毫秒再发下个字节。
[java] view plain
for (byte b : bytes) {
out.write(b);
Thread.sleep(10);
}

具体的延时时间和字节发送速率得看单片机那里程序的设置。
在使用InputStream的时候,必须注意,InputStream的读取是阻塞的。这点在一般的情况下是不会影响到我们的程序,但是记住这个情况对于代码的设计是非常重要的,尤其是在考虑用户体验的时候。
无参数的read()是每次只从流中读取一个字节,这种做法效率非常低,但是简单,像是读取整数值这种情况,使用read()就非常好,但如果是16进制字符串呢?使用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int off,int len)方法,这样一次就能读取多个字节。
如果是读取多个字节,我们常常使用InputStream.available()方法来获取数据流中可读字节的个数。读取本地数据的时候,该方法发挥得非常好,但如果是读取非本地数据,就可能出现字节遗漏的问题,像是要读取100个字节,可能就是90个,甚至是0个。
出现0个的情况就是单片机那边没有响应或者字节还没发送过来,这时我们就需要一个循环来保证我们能够拿到数据:
[java] view plain
int count = 0;
while (count == 0) {
count = in.available();
}
byte[] bytes = new byte[count];
in.read(bytes);

但像是上面的90个字节的情况就是字节遗漏。对于这种情况,解决方法也很简单:

[java] view plain
byte[] bytes = new byte[count];
int readCount = 0; // 已经成功读取的字节的个数
while (readCount < count) {
readCount += in.read(bytes, readCount, count - readCount);
}

❷ 为什麽Android源码中的常量用十六进制表示

只是表示习惯,计算机数据是二进制的。
一个16进制位表示0-15,二进制就是0b0000-0b1111,是4个bit位,两个十六进制位正好表示一个字节。
十六进制正好表示字节数据,比较符合计算机专业人士的习惯。
所以一个int数通常是4字节正好写成0x00000000-0xFFFFFFFF。
格式上美观,也符合专业习惯。其实和用十进制是一样的。
类似的一个8进制只是2的3次方 0b000-0b111。

❸ Android 怎样接收十六进制数据

发送消息之前转码为16进制
Java code
public static final String encodeHex(String msg) {
byte[] bytes = null;
try {
bytes = msg.getBytes("GBK");
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
StringBuffer buff = new StringBuffer(bytes.length * 4);
String b;
char a;
int n = 0;
int m = 0;
for (int i = 0; i < bytes.length; i++) {
b = Integer.toHexString(bytes[i]);
if (bytes[i] > 0) {
buff.append("00");
buff.append(b);
n = n + 1;
} else {
a = msg.charAt((i - n) / 2 + n);
m = a;
b = Integer.toHexString(m);
buff.append(b.substring(0, 4));
i = i + 1;
}
}
return buff.toString();
}

❹ android串口通信如何发送16进制给给下位机

已解决,发送串口帧数据时,对于16进制数据定义,直接用byte[]数组就行了,不需要用Array.fill函数;

❺ android 16进制数怎么转换成一个字节的byte

两位16进制数就是一个字节。
如果高于2位则会舍弃,如果低于两位的直接赋值即可。

❻ 为什么android的R类要定义成16进制

用十六进制表示,并不完全;如 activity 类的定义 ;public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, OnCreateContextMenuListener, ComponentCallbacks2 { private static final String TAG = "Activity"; private static final boolean DEBUG_LIFECYCLE = false; /** Standard activity result: operation canceled. */ public static final int RESULT_CANCELED = 0; /** Standard activity result: operation succeeded. */ public static final int RESULT_OK = -1;另外关于 十六进制的好处: 以下有个例子可供参考,希望有帮助:public interface Const { public static final int ALIGN_TOP = 1; public static final int ALIGN_VCENTER = ALIGN_TOP << 1; public static final int ALIGN_LEFT = ALIGN_TOP << 2; public static final int ALIGN_RIGHT = ALIGN_TOP << 3; public static final int ALIGN_HCENTER = ALIGN_TOP << 4; public static final int ALIGN_BOTTOM = ALIGN_TOP << 5; }对于 常量之间的关系可互相引用

❼ android字符串转换成16进制怎么转

android字符串转换成16进制,参考如下内容:
/**
* 字符串转换成十六进制字符串
* @param String str 待转换的ASCII字符串
* @return String 每个Byte之间空格分隔,如: [61 6C 6B]
*/
public static String str2HexStr(String str)
{

char[] chars = "0123456789ABCDEF".toCharArray();
StringBuilder sb = new StringBuilder("");
byte[] bs = str.getBytes();
int bit;

for (int i = 0; i < bs.length; i++)
{
bit = (bs[i] & 0x0f0) >> 4;
sb.append(chars[bit]);
bit = bs[i] & 0x0f;
sb.append(chars[bit]);
sb.append(' ');
}
return sb.toString().trim();
}

❽ android代码怎么控制16进制的颜色值

它的代码是#后面是16进制的RGB
例:
红色#FF0000可以拆分为FF,00,00;转换为10进制为255,0,0

绿色#00FF00可以拆分为00,FF,00;转换为10进制为0,255,0

❾ android如何将字符串转换成16进制数

Integer.parseInt(String, 16);

❿ Android socket 获得16进制数据

mDataOutputClient = new DataOutputStream(mSocketClient.getOutputStream());
//发送
mDataOutputClient.write(0XFF);
mDataOutputClient.flush();
//接收
DataInputStream dis = new DataInputStream(mSocketClient.getInputStream());
int r=dis.readInt(); //接收int

接收十六进制。==> byte r=dis.readByte();
发送十六进制。==> byte r= (byte) 0xFF; dos.writeByte(r);

BufferedReader不推荐使用,因为不适合。

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:629
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:357
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:76
php微信接口教程 发布:2025-04-16 17:07:30 浏览:300
android实现阴影 发布:2025-04-16 16:50:08 浏览:788
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:338
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:204
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:801
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:357
土压缩的本质 发布:2025-04-16 16:13:21 浏览:583