1.将offset(取0~7)位设置为bitvalue(0或1).
private byte setBit(byte value,int offset,int bitValue){
if(bitValue==0)
return (byte)(value.&~((<<offset));
else return............;填空。(在。。。。。。处填空。)
}
3.有一个byte数组,里面有些包,包头0x00,0x11,包尾0x00,0x22
(包中也可能有0x00,0x22)
实现下面的方法:
int getPackCount(byte[] data,int n)
求取长度为n的data字节数组中,有多少个这样的包?
7 个解决方案
#1
写了有一会了,不常处理byte。没ide答不出来这题。
public static void main(String[] args) {
byte value = (byte) (125 & 0XFF);
System.out.println(Integer.toBinaryString(value));
int rs = setBit(value, 0, 0) & 0XFF;
System.out.println(Integer.toBinaryString(rs));
}
private static byte setBit(byte value, int offset, int bitValue) {
int[] tmp = new int[] { 1, 1, 1, 1, 1, 1, 1, 1 };
tmp[offset] = bitValue;
String t = "";
for (int i = 0; i < 8; i++)
t = tmp[i] + t;
int a = Integer.parseInt(t, 2) & 0XFF;
return (byte) ((value & a) & 0XFF);
}
#2
http://blog.csdn.net/sunyujia/archive/2008/05/04/2385727.aspx
http://topic.csdn.net/u/20081013/20/cf4c88cf-a314-4343-a77b-4bd50477df2e.html
第2题一会换换脑子回来在看。
http://topic.csdn.net/u/20081013/20/cf4c88cf-a314-4343-a77b-4bd50477df2e.html
第2题一会换换脑子回来在看。
#3
好啊,加油啊。
#4
第一个:
public class BitOpt {
public static byte setBit(byte value, int offset, int bitValue) {
if (bitValue == 0) return (byte)(value & ~(1 << offset));
else return (byte)(value | (1 << offset));
}
public static void main(String[] args) {
byte b = 101;
System.out.println(Integer.toString(b, 2));
b = (byte) setBit(b, 2, 0);
System.out.println(Integer.toString(b, 2));
b = (byte) setBit(b, 4, 1);
System.out.println(Integer.toString(b, 2));
}
}
#5
第二个:楼下请再帮我多拿几组数据测试一下
public class BitOpt {
public static int getPackCount(byte[] data, int n) {
if (data == null || data.length == 0 || n <= 0) return 0;
final byte PACKHEAD1 = 0x00;
final byte PACKHEAD2 = 0x11;
final byte PACKTAIL1 = 0x00;
final byte PACKTAIL2 = 0x22;
int count = 0;
final int toidx = Math.min(data.length, n) - 1;
boolean flag = false;
for (int i = 0; i < toidx;) {
if (flag) {
if (data[i++] == PACKTAIL1 && data[i++] == PACKTAIL2) {
count++;
flag = false;
}
} else {
if (data[i++] == PACKHEAD1 && data[i++] == PACKHEAD2) {
flag = true;
}
}
}
return count;
}
public static void main(String[] args) {
byte[] td = {
0x12, 0x00, 0x69, 0x00, 0x11, 0x09, 0x00, 0x14,
0x00, 0x22, 0x00, 0x65, 0x22, 0x11, 0x00, 0x11,
0x00, 0x22, 0x12
};
System.out.println(getPackCount(null, 23));
System.out.println(getPackCount(td, 0));
System.out.println(getPackCount(td, -1));
System.out.println(getPackCount(new byte[0], 23));
System.out.println(getPackCount(td, 23));
}
}
#6
程序是运行通啦。谢谢啊,原来大虾都是在网上的。
#7
还有高人吗?拜求更多好程序啊。
#1
写了有一会了,不常处理byte。没ide答不出来这题。
public static void main(String[] args) {
byte value = (byte) (125 & 0XFF);
System.out.println(Integer.toBinaryString(value));
int rs = setBit(value, 0, 0) & 0XFF;
System.out.println(Integer.toBinaryString(rs));
}
private static byte setBit(byte value, int offset, int bitValue) {
int[] tmp = new int[] { 1, 1, 1, 1, 1, 1, 1, 1 };
tmp[offset] = bitValue;
String t = "";
for (int i = 0; i < 8; i++)
t = tmp[i] + t;
int a = Integer.parseInt(t, 2) & 0XFF;
return (byte) ((value & a) & 0XFF);
}
#2
http://blog.csdn.net/sunyujia/archive/2008/05/04/2385727.aspx
http://topic.csdn.net/u/20081013/20/cf4c88cf-a314-4343-a77b-4bd50477df2e.html
第2题一会换换脑子回来在看。
http://topic.csdn.net/u/20081013/20/cf4c88cf-a314-4343-a77b-4bd50477df2e.html
第2题一会换换脑子回来在看。
#3
好啊,加油啊。
#4
第一个:
public class BitOpt {
public static byte setBit(byte value, int offset, int bitValue) {
if (bitValue == 0) return (byte)(value & ~(1 << offset));
else return (byte)(value | (1 << offset));
}
public static void main(String[] args) {
byte b = 101;
System.out.println(Integer.toString(b, 2));
b = (byte) setBit(b, 2, 0);
System.out.println(Integer.toString(b, 2));
b = (byte) setBit(b, 4, 1);
System.out.println(Integer.toString(b, 2));
}
}
#5
第二个:楼下请再帮我多拿几组数据测试一下
public class BitOpt {
public static int getPackCount(byte[] data, int n) {
if (data == null || data.length == 0 || n <= 0) return 0;
final byte PACKHEAD1 = 0x00;
final byte PACKHEAD2 = 0x11;
final byte PACKTAIL1 = 0x00;
final byte PACKTAIL2 = 0x22;
int count = 0;
final int toidx = Math.min(data.length, n) - 1;
boolean flag = false;
for (int i = 0; i < toidx;) {
if (flag) {
if (data[i++] == PACKTAIL1 && data[i++] == PACKTAIL2) {
count++;
flag = false;
}
} else {
if (data[i++] == PACKHEAD1 && data[i++] == PACKHEAD2) {
flag = true;
}
}
}
return count;
}
public static void main(String[] args) {
byte[] td = {
0x12, 0x00, 0x69, 0x00, 0x11, 0x09, 0x00, 0x14,
0x00, 0x22, 0x00, 0x65, 0x22, 0x11, 0x00, 0x11,
0x00, 0x22, 0x12
};
System.out.println(getPackCount(null, 23));
System.out.println(getPackCount(td, 0));
System.out.println(getPackCount(td, -1));
System.out.println(getPackCount(new byte[0], 23));
System.out.println(getPackCount(td, 23));
}
}
#6
程序是运行通啦。谢谢啊,原来大虾都是在网上的。
#7
还有高人吗?拜求更多好程序啊。