socket自定義資料格式轉化二進位制

2021-07-27 05:46:47 字數 3177 閱讀 4458

一般傳送的資料,肯定有訊息型別,訊息序列號,具體的自定義訊息內容;

則可以先定義乙個統一的格式:

prefix + packtype(1) + seq(4) +[userdata](標誌性字首+訊息型別+序列號+自定義資料)

針對上面根據每種訊息型別自定義的userdata,可以這樣定義格式:

[filedtype + filedlength+ filedvalue](字段型別標誌+字段長度+字段值)

直接看例子

packdata ()為打包訊息

public

class

utils

byte data = new

byte[max_packet_length];

int offset = 0;

// 打包資料頭部

//add prefix

data[offset++] = packet_prefix;

//add msgtype

data[offset++] = packtype;

//add seq

addint(data, offset, seq);

offset += int_length;

if (data.length < offset + userdata.length)

system.arraycopy(userdata, 0, data, offset, userdata.length);

offset += userdata.length;

byte result = new

byte[offset];

system.arraycopy(data, 0, result, 0, offset);

return result;

}public

static

intbytestoint(byte src, int offset)

int sendseq;

sendseq = src[offset++] & 0xff;

sendseq |= (src[offset++] << 8) & 0xff00;

sendseq |= (src[offset++] << 16) & 0xff0000;

sendseq |= (src[offset++] << 24) & 0xff000000;

return sendseq;

}public

static

byte inttobytes(int value)

public

static

void

addint(byte src, int offset, int value)

/*** [filedtype + filedlength+ filedvalue]

**@param src

*@param filedbytes

*/public

static

void

addfiledbytes(byte src, int offset, byte filedbytes, byte fieldtype)

下面為自定義的資料devicedata 如何和byte 相互轉化

public

class

devicedata

extends

baseuserdata

public

void

setdevid(string devid)

public string getservicename()

public

void

setservicename(string servicename)

public string getpkgname()

public

void

setpkgname(string pkgname)

public

intgetfunc()

public

void

setfunc(int func)

/*** [filedtype + filedlength+ filedvalue]

**@param device

*@return

*/public

static

byte packdevicedata(devicedata device)

try catch (unsupportedencodingexception e)

return

null;

}public

static devicedata parsedeviceuserdata(byte userdata)

int offset = 0;

while (offset + filed_header_length < userdata.length)

switch (datatype) catch (unsupportedencodingexception e)

device.setdevid(devid);

break;

case field_type_servicename:

string servicename = null;

try catch (unsupportedencodingexception e)

device.setservicename(servicename);

break;

case field_type_pkgname:

string pkgname = null;

try catch (unsupportedencodingexception e)

device.setpkgname(pkgname);

break;

case field_type_function:

int func = utils.bytestoint(userdata, offset);

if (func > 0)

break;

default:

}offset += len;

}return device;

}@override

public string tostring() ";

}}

json資料格式及其轉化方式

js裡面的資料格式 json object array var stu var stu1 console.log stu.name,stu1 後台返回的資料格式如果是物件,直接使用,如果是json,字串格式 var stu2 json物件轉化為字串型別的json var m json.stringi...

theme自定義格式

在androidmanifest.xml檔案中,可以對每乙個activity設定android theme theme的設定 可以設定為系統自帶的格式,也可以自定義格式。a 系統自帶格式 android style theme.black 背景黑色 有標題 非全屏 android style the...

VB Format自定義格式

下面 標識了一些可用來建立使用者自定義數值格式的字元 字元 說明 無 顯示沒有格式的數值。0 數字佔位符。顯示一位數字或是零。如果表示式在格式字串中 0 的位置上有一位數字存在,那麼就顯示出來 否則,就以零顯示。如果數值的位數少於格式表示式中零的位數 無論是小數點的左方或右方 那麼就把前面或後面的零...