A. java將byte數組中的中間一部分值取出來怎麼做啊
如果以這種方式存儲,那麼一定是定長字元串,byte[]是以位元組來存儲的,你直接取規則的長度就行了啊
如下:
byte[] b = new byte[10];
b[0]='a';
b[1]='b';
b[2]='c';
b[3]='d';
String a = new String(b,0,2);
用你的例子來說:比如你的標志是5位的,編號12位,日期20位,測量值10位
那麼應該是
String bz = new String(b,0,5);
String bh = new String(b,5,12);
...............
以此方式解析
B. 如何截取 byte數組
例:
import java.io.UnsupportedEncodingException;
public class CustString {
public static void main(String[] args)
throws UnsupportedEncodingException {
String s =
"我ZWR愛JAVA";
// 獲取GBK編碼下的位元組數據
byte[] data =
s.getBytes(「GBK」);
byte[] tmp = new byte[6];
// //
將data數組的前六個位元組拷貝到tmp數組中
System.array(data, 0, tmp, 0, 6);
//
// 將截取到的前六個位元組以字元串形式輸出到控制台
s = new
String(tmp);
System.out.println(s);
}
}
結果:
��ZWR�
如果去掉GBK,則結果為:我ZWR
方法論2:
import java.io.UnsupportedEncodingException;
public class CutString {
public static boolean
isChineseChar(char c)
throws
UnsupportedEncodingException { // 如果位元組數大於1,是漢字 //
//
以這種方式區別英文字母和中文漢字並不是十分嚴謹,但在這個題目中,這樣判斷已經足夠了
return
String.valueOf(c).getBytes().length > 1;
}
public static String substring(String orignal, int
count)
throws UnsupportedEncodingException { //
原始字元不為null,也不是空字元串
if (orignal != null &&
!"".equals(orignal)) { // 將原始字元串轉換為GBK編碼格式
orignal = new
String(orignal.getBytes()); // 要截取的位元組數大於0,且小於原始字元串的位元組數
if
(count > 0 && count < orignal.getBytes().length)
{
StringBuffer buff = new
StringBuffer();
char
c;
for (int i = 0; i < count; i++)
{
// charAt(int
index)也是按照字元來分解字元串的
c =
orignal.charAt(i);
buff.append(c);
if
(CutString.isChineseChar(c)) { //
遇到中文漢字,截取位元組總數減1
--count;
}
}
return
buff.toString();
}
}
return
orignal;
}
public static void main(String[] args) { // 原始字元串
String
s = "我ZWR愛JAVA";
System.out.println("原始字元串:" +
s);
try {
System.out.println("截取前1位:" +
CutString.substring(s, 1));
System.out.println("截取前2位:" +
CutString.substring(s, 2));
System.out.println("截取前4位:" +
CutString.substring(s, 4));
System.out.println("截取前6位:" +
CutString.substring(s, 6));
} catch
(UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
}
即判斷是否為漢字,再截取
C. 如何刪除byte數組里的某個元素
利用雙重循環,將每個值依次與其後面的值相比較,如果有相同的則刪除該元素即可。
刪除時,可以使用將後面元素依次向前移動一位,同時總長度減一的方式。
參考代碼如下:
int remove_repeat(int *a, int l)
{
int i, j, k;
for(i = 0; i < l; i ++)
{
for(j = i+1; j <l; j ++)//對後面每個元素比較,去重。
{
if(a[j] == a[i])//發現重復元素。
{
for(k = j+1; k<l; k ++)//依次前移一位。
a[k-1] = a[k];
l--;//總長度減一。
}
}
}
return l;//返回新的長度值。
}
D. BYTE數組里查尋是否含有某個字元串
哥們,我實在是沒有把字元串放進byte數組的能力,我只能把字元串轉換成byte數組,但是裡面是ascii,
E. 怎麼在byte數組裡面查找另一個byte數組在第
以下實現byte數組裡面查找另一個byte數組在第一個數組裡面的位置,可通過修改bb數組的值是否存在於b數組的值就可實現是否包含某個字元publicintGetIndexOf(byte[]b,byte[]bb){if(b==null||bb==null||b.Length==0||bb.Length==0||b.Length<bb.Length)return-1;inti,j;for(i=0;i<b.Length-bb.Length+1;i++){if(b[i]==bb[0]){for(j=1;j<bb.Length;j++){if(b[i+j]!=bb[j])break;}if(j==bb.Length)returni;}}return-1;}
F. byte數組的檢驗和
類似
publicclassTest{
publicstaticvoidmain(Stringargs[]){
byte[]b=newbyte[1024];
shorts=0;
//累加求和
for(inti=4;i<1022;i++){
s+=b[i];
}
b[1022]=(byte)((s>>8)&0xFF);
b[1023]=(byte)(s&0xFF);
}
}
G. 如何清空byte數組
一般是這么用的
byte[] tmp = null;
可以用其它數據來初始化tmp,如圖片等用IO流初始化。
然後進行一系列的操作後
需要清空tmp,直接 tmp=null; 就OK了。
H. byte數組中怎樣去掉多餘的數據
如果是動態分配的數組,可以用釋放內存空間的方法釋放。
I. java mina接收與發送位元組數組(byte[])
要自己根據發送的數據包格式寫一個過濾器 ,或者將發送的數據包封裝成對象再發送。
J. byte數組如何去掉空閑空間
如果是動態分配的數組,可以用釋放內存空間的方法釋放。
例如 C 語言 realloc() 函數,就可以。byte數組 在c語言里 是 unsigned char.
函數原型是 void* realloc (void* ptr, size_t size);
新 size 比 老 size 數值小多少,就去掉了多少。
unsigned char* numbers = NULL;
unsigned char* less_numbers = NULL;
int count = 0;
若原先分配的 count = 120, 現在是 count = 80:
less_numbers = (unsigned char*) realloc (numbers, count * sizeof(unsigned char));
if (less_numbers!=NULL) numbers=less_numbers;
釋放了 40 bytes