当前位置:首页 » 安卓系统 » androidbyteint

androidbyteint

发布时间: 2023-05-02 01:30:20

① 在android中实现在Edittext中输入两个字节的二进制,将两个字节转换十进制数据,在两个textview中显示

首先需要说明的是,在Android中用于输入的控件是EditText;
对EditText使用getText()方法,返回一个Editable对象,对这个对象使用toString()方法,获得一个String对象;
使用Integer.parseInt(String str);方法可以将String对象转换成Int型数据;
最后对TextView对象使用setText()方法,需要注意的是这个方法接受String对象,或者int型资源ID;
private EditText etvalue2;
private EditText etvalue1;
private TextView textView;
private int value1;
private int value2;
private int result;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textView=(TextView)findViewById(R.id.textView);
etvalue1 = (EditText) findViewById(R.id.editText);
etvalue2=(EditText)findViewById(R.id.editText2);

findViewById(R.id.btn_run).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
value1 =Integer.parseInt(etvalue1.getText().toString()) ;
value2 = Integer.parseInt(etvalue2.getText().toString());
result =value1+value2;
textView.setText(""+result+"");
}
});
}
分享

② Android中各基本数据类型所占字节数是多少

android的也就是java的,如下:
byte 1个字节
short 2个字节
char 2个字节
int 4个字节
long 8个字节
float 4个字节
double 8个字节

③ android开发中怎样实现混音

音频混音的原理: 量化的语音信号的叠加等价于空气中声波的叠加。

下面是代码,可以参照来学习:

publicvoidmixAudios(File[]rawAudioFiles){	
finalintfileSize=rawAudioFiles.length;

FileInputStream[]audioFileStreams=newFileInputStream[fileSize];
FileaudioFile=null;

FileInputStreaminputStream; byte[][]allAudioBytes=newbyte[fileSize][]; boolean[]streamDoneArray=newboolean[fileSize]; byte[]buffer=newbyte[512]; intoffset;
try{
for(intfileIndex=0;fileIndex<fileSize;++fileIndex){
audioFile=rawAudioFiles[fileIndex];
audioFileStreams[fileIndex]=newFileInputStream(audioFile);
} while(true){
for(intstreamIndex=0;streamIndex<fileSize;++streamIndex){

inputStream=audioFileStreams[streamIndex]; if(!streamDoneArray[streamIndex]&&(offset=inputStream.read(buffer))!=-1){
allAudioBytes[streamIndex]=Arrays.Of(buffer,buffer.length);
}else{
streamDoneArray[streamIndex]=true;
allAudioBytes[streamIndex]=newbyte[512];
}
}
byte[]mixBytes=mixRawAudioBytes(allAudioBytes);
//mixBytes就是混合后的数据

booleandone=true; for(booleanstreamEnd:streamDoneArray){ if(!streamEnd){
done=false;
}
}
if(done){ break;
}
}

}catch(IOExceptione){
e.printStackTrace(); if(mOnAudioMixListener!=null)
mOnAudioMixListener.onMixError(1);
}finally{ try{ for(FileInputStreamin:audioFileStreams){ if(in!=null)
in.close();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
}/**
*每一行是一个音频的数据
*/byte[]averageMix(byte[][]bMulRoadAudioes){
if(bMulRoadAudioes==null||bMulRoadAudioes.length==0) returnnull; byte[]realMixAudio=bMulRoadAudioes[0];
if(bMulRoadAudioes.length==1) returnrealMixAudio;
for(intrw=0;rw<bMulRoadAudioes.length;++rw){ if(bMulRoadAudioes[rw].length!=realMixAudio.length){
Log.e("app","columnoftheroadofaudio+"+rw+"isdiffrent."); returnnull;
}
}
introw=bMulRoadAudioes.length; intcoloum=realMixAudio.length/2; short[][]sMulRoadAudioes=newshort[row][coloum]; for(intr=0;r<row;++r){ for(intc=0;c<coloum;++c){
sMulRoadAudioes[r][c]=(short)((bMulRoadAudioes[r][c*2]&0xff)|(bMulRoadAudioes[r][c*2+1]&0xff)<<8);
}
} short[]sMixAudio=newshort[coloum]; intmixVal; intsr=0; for(intsc=0;sc<coloum;++sc){
mixVal=0;
sr=0; for(;sr<row;++sr){
mixVal+=sMulRoadAudioes[sr][sc];
}
sMixAudio[sc]=(short)(mixVal/row);
} for(sr=0;sr<coloum;++sr){
realMixAudio[sr*2]=(byte)(sMixAudio[sr]&0x00FF);
realMixAudio[sr*2+1]=(byte)((sMixAudio[sr]&0xFF00)>>8);
} returnrealMixAudio;
}

④ 如何在android程序中执行adb shell命令

android程序执行adbshell命令(实例源码)packagenet.gimite.nativeexe;importjava.io.BufferedReader;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.MalformedURLException;importjava.net.URL;importnet.gimite.nativeexe.R;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.*;{privateTextViewoutputView;privateButtonlocalRunButton;privateEditTextlocalPathEdit;privateHandlerhandler=newHandler();privateEditTexturlEdit;privateButtonremoteRunButton;/**.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);outputView=(TextView)findViewById(R.id.outputView);localPathEdit=(EditText)findViewById(R.id.localPathEdit);localRunButton=(Button)findViewById(R.id.localRunButton);localRunButton.setOnClickListener(onLocalRunButtonClick);}=newOnClickListener(){publicvoidonClick(Viewv){Stringoutput=exec(localPathEdit.getText().toString());output(output);//try{//////Processprocess=Runtime.getRuntime().exec(localPathEdit.getText().toString());////}catch(IOExceptione){////TODOAuto-generatedcatchblock//e.printStackTrace();//}}};//ExecutesUNIXcommand.privateStringexec(Stringcommand){try{Processprocess=Runtime.getRuntime().exec(command);BufferedReaderreader=newBufferedReader(newInputStreamReader(process.getInputStream()));intread;char[]buffer=newchar[4096];StringBufferoutput=newStringBuffer();while((read=reader.read(buffer))>0){output.append(buffer,0,read);}reader.close();process.waitFor();returnoutput.toString();}catch(IOExceptione){thrownewRuntimeException(e);}catch(InterruptedExceptione){thrownewRuntimeException(e);}}privatevoiddownload(StringurlStr,StringlocalPath){try{URLurl=newURL(urlStr);HttpURLConnectionurlconn=(HttpURLConnection)url.openConnection();urlconn.setRequestMethod("GET");urlconn.setInstanceFollowRedirects(true);urlconn.connect();InputStreamin=urlconn.getInputStream();FileOutputStreamout=newFileOutputStream(localPath);intread;byte[]buffer=newbyte[4096];while((read=in.read(buffer))>0){out.write(buffer,0,read);}out.close();in.close();urlconn.disconnect();}catch(MalformedURLExceptione){thrownewRuntimeException(e);}catch(IOExceptione){thrownewRuntimeException(e);}}privatevoidoutput(finalStringstr){Runnableproc=newRunnable(){publicvoidrun(){outputView.setText(str);}};handler.post(proc);}}

⑤ eclipse写android程序,怎么将从蓝牙模块中接受的16进制的数据转换成十进制

/* *
* Convert byte[] to hex string.我byte转换int利用Integer.toHexString(int)
*转换16进制字符串
* @param src byte[] data
* @return hex string
*/
public static String bytesToHexString(byte[] src){
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
能byte[]转化16进制字符串希望能帮

⑥ 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);
}

⑦ 安卓开发中怎么将文件转换成base64字符串

将文件转成base64 字符串,android 手机开发的时候会用到,当然在android有转base64的方法,这里调用的是jdk的api
[代码] [Java]代码
01 package com.xbl.test;
02
03 import java.io.File;
04 import java.io.FileInputStream;
05 import java.io.FileOutputStream;
06
07 import sun.misc.BASE64Decoder;
08 import sun.misc.BASE64Encoder;
09
10 public class File2Code {
11
12 /**
13 * <p>将文件转成base64 字符串</p>
14 * @param path 文件路径
15 * @return
16 * @throws Exception
17 */
18 public static String encodeBase64File(String path) throwsException {
19 File file = new File(path);
20 FileInputStream inputFile = new FileInputStream(file);
21 byte[] buffer = new byte[(int)file.length()];
22 inputFile.read(buffer);
23 inputFile.close();
24 return new BASE64Encoder().encode(buffer);
25 }
26 /**
27 * <p>将base64字符解码保存文件</p>
28 * @param base64Code
29 * @param targetPath
30 * @throws Exception
31 */
32 public static void decoderBase64File(String base64Code,String targetPath) throws Exception {
33 byte[] buffer = new BASE64Decoder().decodeBuffer(base64Code);
34 FileOutputStream out = new FileOutputStream(targetPath);
35 out.write(buffer);
36 out.close();
37 }
38 /**
39 * <p>将base64字符保存文本文件</p>
40 * @param base64Code
41 * @param targetPath
42 * @throws Exception
43 */
44 public static void toFile(String base64Code,String targetPath)throws Exception {
45 byte[] buffer = base64Code.getBytes();
46 FileOutputStream out = new FileOutputStream(targetPath);
47 out.write(buffer);
48 out.close();
49 }
50 public static void main(String[] args) {
51 try {
52 String base64Code =encodeBase64File("D:\\1.jpg");
53 System.out.println(base64Code);
54 decoderBase64File(base64Code, "D:\\2.jpg");
55 toFile(base64Code, "D:\\three.txt");
56 } catch (Exception e) {
57 e.printStackTrace();
58 }
59 }
60
61 }

⑧ android蓝牙BLE(三) —— 广播

​ 在蓝牙开发中,有些情况是不需要连接的,只要外设广播自己的数据即可,例如苹果的 ibeacon 。自 Android 5.0 更新蓝牙API后,手机可以作为外设广播数据。

广播包有两种:

其中 广播包是每个外设都必须广播的,而响应包是可选的 。每个广播包的长度必须是 31个字节 ,如果不到 31个字节 ,则剩下的全用 0 填充 补全,这部分的数据是无效的

广播包中包含若干个广播数据单元,广播数据单元也称为 AD Structure 。

广播数据单元 = 长度值Length + AD type + AD Data。

长度值 Length 只占 一个字节 ,并且位于广播数据单元的 第一个字节

概念的东西有些抽象,先看看下面的广播报文:

​ 0x代表这串字符串是十六进制的字符串。 两位十六进制数代表一个字节 。因为两个字符组成的十六进制字符串最大为 FF ,即255,而Java中byte类型的取值范围是-128到127,刚好可以表示一个255的大小。所以两个十六进制的字符串表示一个字节。

​ 继续查看报文内容,开始读取第一个广播数据单元。读取 第一个 字节: 0x07 ,转换为十进制就是7,即表示后面的7个字节是这个广播数据单元的数据内容。超过这7个字节的数据内容后,表示是一个新的广播数据单元。

​ 而第二个广播数据单元,第一个字节的值是 0x16 ,转换为十进制就是22,表示后面22个字节为第二个广播数据单元。

​ 在广播数据单元的 数据部分 中, 第一个字节 代表 数据类型 (AD type),决定数据部分表示的是什么数据。(即广播数据单元第二个字节为AD type)

AD Type 的类型如下:

​ 这bit 1~7分别代表着发送该广播的蓝牙芯片的物理连接状态。当bit的值为1时,表示支持该功能。
例:

蓝牙广播的数据格式大致讲了一下,有助于下面的广播操作的理解。

先看看广播设置( AdvertiseSettings )如何定义:

(1)、通过 AdvertiseSettings.Builder#setAdvertiseMode() 设置广播模式。其中有3种模式:

(2)、通过 AdvertiseSettings.Builder#setAdvertiseMode() 设置广播发射功率。共有4种功率模式:

(3)、通过 AdvertiseSettings.Builder#setTimeout() 设置持续广播的时间,单位为毫秒。最多180000毫秒。当值为0则无时间限制,持续广播,除非调用 BluetoothLeAdvertiser#stopAdvertising() 停止广播。

(4)、通过 AdvertiseSettings.Builder#setConnectable() 设置该广播是否可以连接的。

之前说过,外设必须广播广播包,扫描包是可选。但添加扫描包也意味着广播更多得数据,即可广播62个字节。

可见无论是广播包还是扫描包,其广播的内容都是用 AdvertiseData 类封装的。

(1)、 AdvertiseData.Builder#setIncludeDeviceName() 方法,可以设置广播包中是否包含蓝牙的名称。

(2)、 AdvertiseData.Builder#setIncludeTxPowerLevel() 方法,可以设置广播包中是否包含蓝牙的发射功率。

(3)、 AdvertiseData.Builder#addService UUID (Parcel UUID ) 方法,可以设置特定的 UUID 在广播包中。

(4)、 AdvertiseData.Builder#addServiceData(Parcel UUID ,byte[]) 方法,可以设置特定的 UUID 和其数据在广播包中。

(5)、 AdvertiseData.Builder#addManufacturerData(int,byte[]) 方法,可以设置特定厂商Id和其数据在广播包中。

​ 从 AdvertiseData.Builder 的设置中可以看出,如果一个外设需要在不连接的情况下对外广播数据,其数据可以存储在 UUID 对应的数据中,也可以存储在厂商数据中。但由于厂商ID是需要由Bluetooth SIG进行分配的,厂商间一般都将数据设置在厂商数据。

另外可以通过 BluetoothAdapter#setName() 设置广播的名称

先看一个例子,我们分别在 广播包 扫描包 中设置 AdvertiseData.Builder 的 每一种广播报文参数 ,得到一下报文内容:

(1)、Type = 0x01 表示设备LE物理连接。

(2)、Type = 0x09 表示设备的全名

(3)、Type = 0x03 表示完整的16bit UUID 。其值为0xFFF7。

(4)、Type = 0xFF 表示厂商数据。前两个字节表示厂商ID,即厂商ID为0x11。后面的为厂商数据,具体由用户自行定义。

(5)、Type = 0x16 表示16 bit UUID 的数据,所以前两个字节为 UUID ,即 UUID 为0xF117,后续为 UUID 对应的数据,具体由用户自行定义。

最后继承 AdvertiseCallback 自定义广播回调。

初始化完毕上面的对象后,就可以进行广播:

​ 广播主要是通过 BluetoothLeAdvertiser#startAdvertising() 方法实现,但在之前需要先获取 BluetoothLeAdvertiser 对象。

BluetoothLeAdvertiser 对象存在两个情况获取为Null:

所以在调用 BluetoothAdapter#getBluetoothLeAdvertiser() 前,需要先调用判断蓝牙已开启,并判断在 BluetoothAdapter 中获取的 BluetoothLeAdvertiser 是否为空(测试过某些华为手机 mBluetoothAdapter.() 为 false , 但是能发送ble广播)。

​ 与广播成对出现就是 BluetoothLeAdvertiser.stopAdvertising() 停止广播了,传入开启广播时传递的广播回调对象,即可关闭广播:

​ 虽然通过广播告知外边自身拥有这些Service,但手机自身并没有初始化Gattd的Service。导致外部的中心设备连接手机后,并不能找到对应的 GATT Service 和 获取对应的数据。

Service类型有两个级别:

创建 BluetoothGattService 时,传入两个参数: UUID 和Service类型:

​ 我们都知道Gatt中, Service 的下一级是 Characteristic , Characteristic 是最小的通信单元,通过对 Characteristic 进行读写操作来进行通信。

​ 特征属性表示该 BluetoothGattCharacteristic 拥有什么功能,即能对 BluetoothGattCharacteristic 进行什么操作。其中主要有3种:

权限属性用于配置该特征值所具有的功能。主要两种:

Characteristic 下还有 Descriptor ,初始化 BluetoothGattDescriptor 时传入: Descriptor UUID 和 权限属性

为 Service 添加 Characteristic ,为 Characteristic 添加 Descriptor :

​ 通过蓝牙管理器 mBluetoothManager 获取 Gatt Server ,用来添加 Gatt Service 。添加完 Gatt Service 后,外部中心设备连接手机时,将能获取到对应的 GATT Service 和 获取对应的数据

​ 定义 Gatt Server 回调。当中心设备连接该手机外设、修改特征值、读取特征值等情况时,会得到相应情况的回调。

最后开启广播后,用nRF连接后看到的特征值信息如下图所示:(加多了一个只能都的特征值)

android蓝牙BLE(一) —— 扫描

android蓝牙BLE(二) —— 通信

android蓝牙BLE(三) —— 广播

android蓝牙BLE(四) —— 实战

⑨ android中如何进行强制类型转换

Java 的自动转换

如果下列2个条件都能满足,那么将一世庆种类型的数据赋给另外一种类型变量时,将执行自动类型转换(automatic type conversion):

1,这2种类型是兼容的。
2,目的类型数的范围比来源类型的大。 ,
当以上2个条件都满足时,拓宽转换(widening conversion )发生。
例如,int 型的范围比所有byte 型的合法范围大,因此不要求显式强制类型转换语句。
对于拓宽转换,数字类型,包括整数(integer )和浮点(floating-point )类型都是彼此兼容的,
但是,数字类型和字符类型(char)或布尔类型(bollean )是不兼容的。字符类型(char )和布尔类型(bollean )也是互相不兼容的。

不兼容类型的强制转换

尽管自动类型转换是很有帮助的,但并不能满足所有的编程需要。例如,如果你需要将int 型的值赋给一个byte 型的变量,
你将怎么办?困返念这种转换不会自动进行,因为byte 型的变化范围比int 型的要小。这种转换有时称为“缩小转换”(),
因为你肯定要将源数据类型的值变小才能适合目标数据类型。

为了完成两种不兼容类型之间的转换,你就必须进行强制类型转换。所谓强制类型转换只不过是一种显式的类型变换。它的通用格式如下:

(target-type)value

其中,目标类型(target-type )指定了要将指定值转换成的类型。例如,下面的程序段将int 型强制转换成byte 型。
如果整数的值超出了byte 型的取值范围,它的值将会因为对byte 型值域取模(整数除以byte 得到的余数)而减少。

int a;

byte b;

// ...

b = (byte) a;

当把浮点值赋给整数类型时一种不同的类型转换发生了:截断(truncation )。你知道整数没有小数部分。
这样,当把浮点值赋给整数类型时,它的小数部分汪困会被舍去。例如,如果将值1.23赋给一个整数,其结果值只是1,0.23 被丢弃了。
当然,如果浮点值太大而不能适合目标整数类型,那么它的值将会因为对目标类型值域取模而减少。

⑩ android byte和byte的区别

估计题写错了哇byte与int的区别:
主要是存储空间的大小和取值范围不同。
byte占用1个字节存储空间,取值范围-128~127
int占用4个字节存储空间,取值范围-2的31次方~2的31次方-1

热点内容
小米自动上传 发布:2025-05-20 05:06:06 浏览:624
王者荣耀引流脚本 发布:2025-05-20 05:06:03 浏览:485
无人深空pc需要什么配置 发布:2025-05-20 04:55:17 浏览:614
可编程式恒温恒湿试验箱 发布:2025-05-20 04:54:34 浏览:367
visibilityandroid 发布:2025-05-20 04:54:26 浏览:699
android磁场传感器 发布:2025-05-20 04:50:46 浏览:828
python经典编程题 发布:2025-05-20 04:42:33 浏览:782
xp电脑访问win7 发布:2025-05-20 04:41:59 浏览:617
金融的配置是什么 发布:2025-05-20 04:41:07 浏览:466
解压挤耳朵 发布:2025-05-20 04:37:02 浏览:887