前言:
最近遇到個問題,APP這邊socket上發(fā)上去的是字節(jié)流,接收到的也是字節(jié)流尝哆,我需要根據(jù)其中的字節(jié)拿到該字節(jié)的8為比特,并轉化為有用的數(shù)據(jù)甜攀。
基礎知識點:
bit:位
一個二進制數(shù)據(jù)0或1秋泄,是1bit;byte:字節(jié)
存儲空間的基本計量單位规阀,如:MySQL中定義 VARCHAR(45) 即是指 45個字節(jié)恒序;
1 byte = 8 bit一個英文字符占一個字節(jié);
1 字母 = 1 byte = 8 bit一個漢字占2個字節(jié)谁撼;
1 漢字 = 2 byte = 16 bit
byte:一個字節(jié)(8位)(-128~127)(-2的7次方到2的7次方-1)
short:兩個字節(jié)(16位)(-32768~32767)(-2的15次方到2的15次方-1)
int:四個字節(jié)(32位)(一個字長)(-2147483648~2147483647)(-2的31次方到2的31次方-1)
long:八個字節(jié)(64位)(-9223372036854774808~9223372036854774807)(-2的63次方到2的63次方-1)
float:四個字節(jié)(32位)(3.402823e+38 ~ 1.401298e-45)(e+38是乘以10的38次方歧胁,e-45是乘以10的負45次方)
double:八個字節(jié)(64位)(1.797693e+308~ 4.9000000e-324&
按位與運算符 ,|
按位或運算符 ,>>
右移運算符 ,<<
左移運算符。(具體有空再補充)
byte轉bit
Byte b = cmds[0x21];
Byte array[8] = {0};
for (int i = 7; i >= 0; i--) {
array[i] = (Byte)(b & 1);
b = (Byte) (b >> 1);
}//array 為8位bit的數(shù)組
DLog(@"0 = %hhu, 1 = %hhu",array[0],array[1]);
bit轉byte
- (Byte)decodeBinaryString:(NSString *)byteStr{ // 傳入例子@“01001000”
unsigned long result;
if (!byteStr.length) {
return 0;
}
NSInteger length = byteStr.length;
if (length != 4 && length != 8) {
return 0;
}
if (length == 8)
{
if ([byteStr characterAtIndex:0] == '0') { // 正數(shù)
result = strtoul([byteStr UTF8String], 0, 2);
}else{ // 負數(shù)
result = strtoul([byteStr UTF8String], 0, 2) - 256;
}
}
else
{
result = strtoul([byteStr UTF8String], 0, 2); // 2進制轉為10進制
}
DLog(@"result = %hhu",(Byte)result);
return (Byte)result;
}
先這樣有空再來補充其他的与帆。