1、快速的從乙個陣列中找到最接近 y 的那個值
(比如說y=3.5,陣列validdata中最接近y的是3.6,則最後希望y等於3.6)
var result = (from x in validdata select new ).orderby(x => x.value);
y = result.tolist()[0].key;
或許不是最簡單的方法,希望大俠指正!
2、上下位機通訊之資料格式-一種可行的方案
上下位機都定義一種descriptor的資料格式
上位機端的繼承關係(c#):
descriptor->listblockcollection->list
descriptorblock->arraylist
stringblock->descriptorblock(stringblock 具有字串處理的特殊方法,做特殊處理)
descriptorcollection 代表記錄的條數,比如說descriptor channeltable,一台機一共有10個channel,那麼就有10個descriptorcollection。
descriptorblock(stringblock) 代表很多條陣列記錄,比如說。頻率一條記錄,子通道一條記錄,功率一條記錄,其他標誌位一條記錄。頻率和子通道又可以分為發射和接收兩個記錄。所以有
descriptoblockr[0][x] = r/t frequency,
descriptoblockr[1][x] = r/t subchannel,
descriptorblock[2][x] = 功率標誌,
descriptorblock[3][x] = 其他標誌位。
下位機 c語言端
下位機具有類似的結構
typedef structpc_protocol_descriptor;
pc_protocol_flag_read :許可權標誌位 flags.
0 :記錄個數字,想當與上面的10個channel記錄 date_count.
"1" :資料型別 data_type.
"2" :名稱 name.
"3" :描述 description.
null1 :資料 data.
null2 :上位機發出寫命令執行的函式 callback_set.
null3 :上位機發出讀命令執行的函式 callback_get.
資料型別用string型別來表示的特殊說明:
因為在乙個descriptor中未必只有一種資料型別,寫個列舉定義每個型別,將列舉值轉換成字串一起傳送。上下位機約定相同的列舉型別,就能保證共同的資料型別。比如說:
c#描述
publicenum
datatypes
;c語言描述:
/*descriptor data types
*/#define pc_protocol_type_uint8 0x01
#define pc_protocol_type_uint8_str "\x01"
#define pc_protocol_type_int8 0x02
#define pc_protocol_type_int8_str "\x02"
#define pc_protocol_type_uint16 0x03
#define pc_protocol_type_uint16_str "\x03"
#define pc_protocol_type_int16 0x04
#define pc_protocol_type_int16_str "\x04"
#define pc_protocol_type_uint32 0x05
#define pc_protocol_type_uint32_str "\x05"
#define pc_protocol_type_int32 0x06
#define pc_protocol_type_int32_str "\x06"
#define pc_protocol_type_int64 0x07
#define pc_protocol_type_int64_str "\x07"
#define pc_protocol_type_uint64 0x08
#define pc_protocol_type_uint64_str "\x08"
#define pc_protocol_type_bool 0x10
#define pc_protocol_type_bool_str "\x10"
#define pc_protocol_type_float 0x20
#define pc_protocol_type_float_str "\x20"
#define pc_protocol_type_double 0x21
#define pc_protocol_type_double_str "\x21"
#define pc_protocol_type_string 0x30
#define pc_protocol_type_string_str "\x30"
#define pc_protocol_type_string_ptr 0x31
#define pc_protocol_type_string_ptr_str "\x31"
傳送的時候 channel uint16兩個資料,uint8兩個資料,uint16乙個資料,string乙個資料(7個位元組)完整的描述為:
,
c 小知識點
1 陣列間拷貝只能使用for迴圈乙個乙個拷貝,但是vector之間可以直接用乙個vector初始化另乙個vector。int main 2 vector 之間比較大小直接用 3 對於實參型別相同,並且數目不確定的情況下我們可以傳遞名為initializer list的標準庫型別。int func s...
C 小知識點
1.在c 中,每個程式必須包含乙個main 的入口函式,只有這樣,這個專案才能執行.2.函式包括 函式名,引數,返回值.3.return 是c 的預定義語句,提供了終止函式的一種方法 return 0表示成功執行正常退出.4.using namespace std 是指引用c 的標準庫.5.c 的4...
c小知識點
一 rand rand 函式用來產生隨機數,但是,rand 的內部實現是用線性同餘法實現的,是偽隨機數,由於週期較長,因此在一定範圍內可以看成是隨機的。rand 會返回乙個範圍在0到rand max 至少是32767 之間的偽隨機數 整數 在呼叫rand 函式之前,可以使用srand 函式設定隨機數...