byte配列と数字
package com.example.test.test41;
import android.util.Log;
//import java.io.ByteArrayInputStream;
//import java.io.DataInputStream;
import java.nio.ByteBuffer;
//import java.nio.DoubleBuffer;
public class clsTest2 extends clsCommon {
public void test2()
{
int iData = 0;
long lData = 0;
double dData = 0;
byte[] byteData = null;
iData = 255;
lData = 255;
dData = 255.0f;
Log.d("","int変換テスト ---------------------");
byteData = NumberToByte(iData);
displayData("NumberToByte(iData)", byteData);
iData = ByteToInt(byteData);
displayData("ByteToInt(byteData)", iData);
Log.d("","long変換テスト ---------------------");
byteData = NumberToByte(lData);
displayData("NumberToByte(lData)", byteData);
lData = ByteToLong(byteData);
displayData("ByteToLong(byteData)", lData);
Log.d("","double変換テスト ---------------------");
byteData = NumberToByte(dData);
displayData("NumberToByte(dData)", byteData);
dData = ByteToDouble(byteData);
displayData("ByteToDouble(byteData)", dData);
/*
start: バイト配列と数字 -----------------------
int変換テスト ---------------------
NumberToByte(iData): �������
ByteToInt(byteData): 255
long変換テスト ---------------------
NumberToByte(lData): ���������������
ByteToLong(byteData): 255
double変換テスト ---------------------
NumberToByte(dData): @o�����������
ByteToDouble(byteData): 255.0
end: バイト配列と数字 -----------------------
*/
}
//サイズの参考
/*
char : 2バイト
byte : 1バイト
short : 2バイト
int : 4バイト
long : 8バイト
float : 4バイト(ビット演算子によるシフト不可)
double : 8バイト(ビット演算子によるシフト不可)
boolean : VM依存
*/
//intからバイト配列に変換
private byte[] NumberToByte(int iData)
{
int iSize = Integer.SIZE / Byte.SIZE;
ByteBuffer buffer = ByteBuffer.allocate(iSize);
return buffer.putInt(iData).array();
}
//longからバイト配列に変換
private byte[] NumberToByte(long lData)
{
int iSize = Long.SIZE / Byte.SIZE;
ByteBuffer buffer = ByteBuffer.allocate(iSize);
return buffer.putLong(lData).array();
}
//doubleからバイト配列に変換
private byte[] NumberToByte(double dData)
{
int iSize = Double.SIZE / Byte.SIZE;
ByteBuffer buffer = ByteBuffer.allocate(iSize);
return buffer.putDouble(dData).array();
}
//バイト配列からintに変換
private int ByteToInt(byte[] byteData)
{
int iData = 0;
int iSize = Integer.SIZE / Byte.SIZE;
for(int i=0; i < byteData.length; i++)
{
iData = (iData << iSize) + (byteData[i] & 0xFF);
}
return iData;
}
//バイト配列からlongに変換
private long ByteToLong(byte[] byteData)
{
int iSize = Long.SIZE / Byte.SIZE;
long lData = 0;
for(int i=0; i < byteData.length; i++)
{
lData = (lData << iSize) + (byteData[i] & 0xFF);
}
return lData;
}
//バイト配列からdoubleに変換
private double ByteToDouble(byte[] byteData)
{
return ByteBuffer.wrap(byteData).getDouble();
}
}
|
byte配列に変換する処理として
floatやdoubleはビット演算子によるシフト処理はできないため
wrapを使用して型変換をしています。
(例)
ByteBuffer.wrap(byteData).getDouble();
また、intに「0xFF」を付加しているのはマイナスの桁落ちを防ぐためとなります。
シフト演算のサイズの参考として次の内容をご覧ください。
サイズの参考
char : 2バイト
byte : 1バイト
short : 2バイト
int : 4バイト
long : 8バイト
float : 4バイト(ビット演算子によるシフト不可)
double : 8バイト(ビット演算子によるシフト不可)
boolean : VM依存
上記で呼び出しているクラス
package com.example.test.test41;
import android.util.Log;
public class clsCommon {
//バイトの結果を表示
protected void displayData(String sTitle, byte[] byteData)
{
//次の2つのいずれも動作可能
//Log.d(sTitle, String.copyValueOf(new String(byteData).toCharArray()));
//Log.d(sTitle, new String(byteData));
String sResult = "";
sResult = new String(byteData);
Log.d(sTitle, sResult);
}
//文字列の結果を表示
protected void displayData(String sTitle, String sData)
{
Log.d(sTitle, sData);
}
//intの結果を表示
protected void displayData(String sTitle, int iData)
{
Log.d(sTitle, String.valueOf(iData));
}
//longの結果を表示
protected void displayData(String sTitle, long lData)
{
Log.d(sTitle, String.valueOf(lData));
}
//doubleの結果を表示
protected void displayData(String sTitle, double dData)
{
Log.d(sTitle, String.valueOf(dData));
}
}
|
クラスをインスタンス化して呼び出している実行部分
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
//バイト配列と文字列
Log.d("start", "バイト配列と文字列 -----------------------");
clsTest1 cls1 = new clsTest1();
cls1.test1();
cls1 = null;
Log.d("end", "バイト配列と文字列 -----------------------");
//バイト配列と数字
Log.d("start", "バイト配列と数字 -----------------------");
clsTest2 cls2 = new clsTest2();
cls2.test2();
cls2 = null;
Log.d("end", "バイト配列と数字 -----------------------");
}
}
|
|
|