C 小的知識點

2022-02-25 05:13:49 字數 3304 閱讀 3773

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 struct

pc_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#描述

public

enum

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 函式設定隨機數...