名词解释

  • LSB
    英文: Least Significant Bit
    中文: 最低有效位
    介绍: 对于一个给定的数据串(整数),如二进制的1001或者十进制351,其最低有效位就是拥有最小单位数值的那一位。比如二进制1001的最右一位,拥有数值1,在该整数中代表最低位,该位的值可以决定整数是奇数(为1)还是偶数(为0),十进制数同理。

一般LSB就是一个整数的最右一位,所以似乎该概念有些多余,==但是凡事都有例外,某些数据传输或是处理器恰恰相反,最左一位是LSB==,所以在计算领域就定义了这个最低有效位以明确说明数据格式。
注:相应的也有MSB - 最高有效位。

Adapter适配器模式

工厂方法模式

��rKsLrKsLrKsLtt����2��//�main��� DkKDkKDkK�����h��6/h��0319.tgz

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include<iostream>
    using namespace std;

    int main()
    {

    class a
    {};

    cout << sizeof(a) << endl;



    }
  2. https://blog.csdn.net/pingingchen/article/details/44594261

  3. 为什么空类型占一个字节: https://blog.csdn.net/imcdragon/article/details/6882875

  1. 为什么空类占用1个字节,而空数组布占呢
    https://bbs.csdn.net/topics/320170518
  1. c语言中的结构体中成员怎么不能直接初始化
    http://bbs.itheima.com/forum.php?mod=viewthread&tid=158477
  1. 先搞清楚初始化和赋值
    https://bbs.csdn.net/topics/390776522
  1. 为什么报错:error C3863: array type 'char [20]' is not assignable

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include<iostream>
    using namespace std;
    #define COMNumberLength 20

    enum enReaderNumber : int //读写器编号枚举类型
    {
    ENRNINREADER, //进站读写器
    ENRNVALUEREADER, //出站储值卡读写器
    ENRNTOKENREADER, //出站单程票读写器
    MAXENRN //枚举类型最大值
    };

    struct stReaderRunParam //读写器运行参数
    {
    char st_COMNumber[COMNumberLength]; //读写器串口号
    int st_Baudrate; //读写器通讯波特率
    int st_WorkType; //读写器工作类型
    int st_LogSize; //读写器日志文件容量
    };
    stReaderRunParam m_RunParam[MAXENRN]; //读写器运行参数


    int main()
    {


    //m_RunParam[1] = { "takethat",115200,2,1 };

    m_RunParam[1].st_Baudrate = 115200;
    m_RunParam[1].st_COMNumber = "tty/s3";
    m_RunParam[1].st_LogSize = 10;
    m_RunParam[1].st_WorkType = 1;
    //memset(m_RunParam, 0x00, 3 * sizeof(stReaderRunParam));
    cout << m_RunParam[3].st_Baudrate << endl;

    return 0;

    }
  2. 用VS查看结构体数组内存地址会

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include<iostream>
    #include <string.h>
    using namespace std;
    #define COMNumberLength 20

    enum enReaderNumber : int //读写器编号枚举类型
    {
    ENRNINREADER, //进站读写器
    ENRNVALUEREADER, //出站储值卡读写器
    ENRNTOKENREADER, //出站单程票读写器
    MAXENRN //枚举类型最大值
    };

    struct stReaderRunParam //读写器运行参数
    {
    int st_Baudrate; //读写器通讯波特率
    char st_COMNumber[COMNumberLength]; //读写器串口号

    int st_WorkType; //读写器工作类型
    int st_LogSize; //读写器日志文件容量
    };
    stReaderRunParam m_RunParam[MAXENRN]; //读写器运行参数


    int main()
    {


    //m_RunParam[1] = { "takethat",115200,2,1 };

    m_RunParam[1].st_Baudrate = 115200;
    strcpy(m_RunParam[1].st_COMNumber, "tty/s3");
    m_RunParam[1].st_LogSize = 10;
    m_RunParam[1].st_WorkType = 1;
    //memset(m_RunParam, 0x00, 3 * sizeof(stReaderRunParam));
    cout << m_RunParam[3].st_Baudrate << endl;

    return 0;

    }

https://www.cnblogs.com/tenjl-exv/p/7559674.html

  1. 1
    2
    3
    4
    5
    6
    7
    8
    int CReader_CD10A::checkCard(void* i_CardData, void* i_TradeData)
    {
    int iRet = 0;

    //iRet = m_cd->SZ_Check_Ticket(i_fd, *(stCheckTicketInfo*)i_CardData, *(stTradeInfo*)i_TradeData);
    iRet = m_cd->CD_AccessStation(*(_stAccessStation*)i_CardData);
    return iRet;
    }
  2. https://blog.csdn.net/u013687632/article/details/78616495

  1. c语言与指针
    https://blog.csdn.net/cooljune/article/details/18809179

初始化和赋值的区别
https://blog.csdn.net/gxnu/article/details/1832462

  1. 函数传参, 结构体强转:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    #define  _CRT_SECURE_NO_WARNINGS
    #include<iostream>
    using namespace std;


    typedef unsigned char U8;

    typedef struct stInitMode {
    char chModeStartTime[15]; // IN,模式发生时间(YYYYMMDDhh24mmss);
    U8 ucModeID; // IN,模式ID (参见第4分册“3.2.11 降级运营模式ID”)
    }_stInitMode;


    struct stInitReaderInfo_CD
    {
    char chLineNumber[3]; // IN,线路编码
    char chStationNumber[3]; // IN,车站编码
    char chEquipType[3]; // IN,设备类型
    char chEquipNumber[4]; // IN,3bytes设备编号
    U8 EquipWorkMode; // IN,设备工作模式(读写器工作模式:0x00——使用指令中的工作模式;0x10——ES;0x20——非付费区BOM;0x21——付费区BOM;0x22——TVM;0x23——TCM;0x24——PCA;0x40——进站AGM;0x41——出站AGM)
    U8 DownWorkModenum; // IN,模式数量
    char chRCodeBaudrate[12]; // IN,关联扫码枪通讯波特率
    _stInitMode Mode[16];
    // stInitMode_CD Mode[16];

    char chRCodeCOM[10]; // IN,关联扫码枪串口号
    char chModeStartTime[15]; // IN,模式发生时间(YYYYMMDDhh24mmss);
    char chRCodeServerAddr[256]; // IN, 支付平台接入地址,例如http://182.140.238.35:61082/
    U8 ucModeID; // IN,模式ID (参见第4分册“3.2.11 降级运营模式ID”)
    bool Mark_IsUseQRcode; //take:add是否启用二维码 在读写器里传参标志需要
    };

    typedef struct stInitReaderInfo {
    char chLineNumber[3]; // IN,线路编码
    char chStationNumber[3]; // IN,车站编码
    char chEquipmentType[3]; // IN,设备类型
    char chEquipmentNumber[4]; // IN,3bytes设备编号
    U8 ucEquipWorkMode; // IN,设备工作模式(读写器工作模式:0x00——使用指令中的工作模式;0x10——ES;0x20——非付费区BOM;0x21——付费区BOM;0x22——TVM;0x23——TCM;0x24——PCA;0x40——进站AGM;0x41——出站AGM)
    U8 ucDownWorkModenum; // IN,模式数量
    _stInitMode Mode[16];
    //char chEquipmentID[17]; // OUT,16位PSAM卡ID
    } _stInitReaderInfo;


    typedef struct _stRCodeInfo {
    char chRCodeCOM[10]; // IN,关联扫码枪串口号
    char chRCodeBaudrate[12]; // IN,关联扫码枪通讯波特率
    char chRCodeServerAddr[256]; // IN, 支付平台接入地址,例如http://182.140.238.35:61082/
    } _stRCodeInfo;




    void startReaderAFC(void* i_StartAFCData)
    {



    /****>>>>>>>>>>>>>>>>>>take:第一个参数结构体***>>>>>>>>>>>>>>>>>>>>>>>>>******************/

    _stInitReaderInfo take_stInitReaderInfo;
    strcpy(take_stInitReaderInfo.chLineNumber, ((stInitReaderInfo_CD*)i_StartAFCData)->chLineNumber);
    strcpy(take_stInitReaderInfo.chStationNumber, ((stInitReaderInfo_CD*)i_StartAFCData)->chStationNumber);
    strcpy(take_stInitReaderInfo.chEquipmentType, ((stInitReaderInfo_CD*)i_StartAFCData)->chEquipType);
    strcpy(take_stInitReaderInfo.chEquipmentNumber, ((stInitReaderInfo_CD*)i_StartAFCData)->chEquipNumber);
    take_stInitReaderInfo.ucEquipWorkMode = ((stInitReaderInfo_CD*)i_StartAFCData)->EquipWorkMode;
    take_stInitReaderInfo.ucDownWorkModenum = ((stInitReaderInfo_CD*)i_StartAFCData)->DownWorkModenum;
    //take_stInitReaderInfo.Mode = ((stInitReaderInfo_CD*)i_StartAFCData)->Mode;
    memcpy(take_stInitReaderInfo.Mode, ((stInitReaderInfo_CD*)i_StartAFCData)->Mode, sizeof(take_stInitReaderInfo.Mode));//take:这样可以吗?

    /***<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<take:第一个参数结构体**<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<******/


    /*>>>>>>>>>>>>>>>>>>>>>>>>>>>take:第二个参数*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
    _stRCodeInfo *ptr_stRCodeInfo = (_stRCodeInfo*)malloc(sizeof(_stRCodeInfo));

    strcpy(ptr_stRCodeInfo->chRCodeCOM, ((stInitReaderInfo_CD*)i_StartAFCData)->chRCodeCOM);
    strcpy(ptr_stRCodeInfo->chRCodeBaudrate, ((stInitReaderInfo_CD*)i_StartAFCData)->chRCodeBaudrate);

    strcpy(ptr_stRCodeInfo->chRCodeServerAddr, ((stInitReaderInfo_CD*)i_StartAFCData)->chRCodeServerAddr);

    cout << take_stInitReaderInfo.Mode[0].chModeStartTime << endl;
    /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************************************************<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
    // cout << ((test*)i_StartAFCData)->chEquipNumber << endl;



    // cout<<((stInitReaderInfo_CD*)i_StartAFCData)->chEquipmentNumber;
    }

    int main()
    {

    stInitReaderInfo_CD temp[2];


    // strcpy(temp[0].chEquipNumber_, "aa");
    temp[0].EquipWorkMode = 34;

    strcpy(temp[0].Mode[0].chModeStartTime, "201804-=18");
    strcpy( temp[0].chLineNumber, "nu");

    strcpy(temp[0].chStationNumber,"st");
    strcpy(temp[0].chEquipType,"tp");
    strcpy(temp[0].chEquipNumber, "chn");


    temp[1] = { 0 };

    startReaderAFC(&temp);


    }
  2. 回车(CR)与换行(LF),即 ‘\r’与’\n’的区别

https://blog.csdn.net/u013540854/article/details/37593357

http://www.ruanyifeng.com/blog/2006/04/post_213.html

彻底搞定回车0d和换行0a
https://blog.csdn.net/e_wsq/article/details/72957218

char 数组长度不能存储’\0’,导致 后面的字符贴上来了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#define  _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdio.h>
using namespace std;


typedef unsigned char U8;

typedef struct stInitMode {
char chModeStartTime[15]; // IN,模式发生时间(YYYYMMDDhh24mmss);
U8 ucModeID; // IN,模式ID (参见第4分册“3.2.11 降级运营模式ID”)
}_stInitMode;


struct stInitReaderInfo_CD
{
char chLineNumber[3]; // IN,线路编码
char chStationNumber[3]; // IN,车站编码
char chEquipType[3]; // IN,设备类型
char chEquipNumber[4]; // IN,3bytes设备编号
U8 EquipWorkMode; // IN,设备工作模式(读写器工作模式:0x00——使用指令中的工作模式;0x10——ES;0x20——非付费区BOM;0x21——付费区BOM;0x22——TVM;0x23——TCM;0x24——PCA;0x40——进站AGM;0x41——出站AGM)
U8 DownWorkModenum; // IN,模式数量
char chRCodeBaudrate[12]; // IN,关联扫码枪通讯波特率
_stInitMode Mode[16];
// stInitMode_CD Mode[16];

char chRCodeCOM[10]; // IN,关联扫码枪串口号
char chModeStartTime[15]; // IN,模式发生时间(YYYYMMDDhh24mmss);
char chRCodeServerAddr[256]; // IN, 支付平台接入地址,例如http://182.140.238.35:61082/
U8 ucModeID; // IN,模式ID (参见第4分册“3.2.11 降级运营模式ID”)
bool Mark_IsUseQRcode; //take:add是否启用二维码 在读写器里传参标志需要
};

typedef struct stInitReaderInfo {
char chLineNumber[3]; // IN,线路编码
char chStationNumber[3]; // IN,车站编码
char chEquipmentType[3]; // IN,设备类型
char chEquipmentNumber[4]; // IN,3bytes设备编号
U8 ucEquipWorkMode; // IN,设备工作模式(读写器工作模式:0x00——使用指令中的工作模式;0x10——ES;0x20——非付费区BOM;0x21——付费区BOM;0x22——TVM;0x23——TCM;0x24——PCA;0x40——进站AGM;0x41——出站AGM)
U8 ucDownWorkModenum; // IN,模式数量
_stInitMode Mode[16];
//char chEquipmentID[17]; // OUT,16位PSAM卡ID
} _stInitReaderInfo;


typedef struct _stRCodeInfo {
char chRCodeCOM[10]; // IN,关联扫码枪串口号
char chRCodeBaudrate[12]; // IN,关联扫码枪通讯波特率
char chRCodeServerAddr[256]; // IN, 支付平台接入地址,例如http://182.140.238.35:61082/
} _stRCodeInfo;




void startReaderAFC(void* i_StartAFCData)
{



/****>>>>>>>>>>>>>>>>>>take:第一个参数结构体***>>>>>>>>>>>>>>>>>>>>>>>>>******************/

_stInitReaderInfo take_stInitReaderInfo;
strcpy(take_stInitReaderInfo.chLineNumber, ((stInitReaderInfo_CD*)i_StartAFCData)->chLineNumber);
strcpy(take_stInitReaderInfo.chStationNumber, ((stInitReaderInfo_CD*)i_StartAFCData)->chStationNumber);
strcpy(take_stInitReaderInfo.chEquipmentType, ((stInitReaderInfo_CD*)i_StartAFCData)->chEquipType);
strcpy(take_stInitReaderInfo.chEquipmentNumber, ((stInitReaderInfo_CD*)i_StartAFCData)->chEquipNumber);
take_stInitReaderInfo.ucEquipWorkMode = ((stInitReaderInfo_CD*)i_StartAFCData)->EquipWorkMode;
take_stInitReaderInfo.ucDownWorkModenum = ((stInitReaderInfo_CD*)i_StartAFCData)->DownWorkModenum;
//take_stInitReaderInfo.Mode = ((stInitReaderInfo_CD*)i_StartAFCData)->Mode;
memcpy(take_stInitReaderInfo.Mode, ((stInitReaderInfo_CD*)i_StartAFCData)->Mode, sizeof(take_stInitReaderInfo.Mode));//take:这样可以吗?

/***<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<take:第一个参数结构体**<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<******/


/*>>>>>>>>>>>>>>>>>>>>>>>>>>>take:第二个参数*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
_stRCodeInfo *ptr_stRCodeInfo = (_stRCodeInfo*)malloc(sizeof(_stRCodeInfo));

memset(ptr_stRCodeInfo->chRCodeBaudrate, '\0', sizeof(ptr_stRCodeInfo->chRCodeBaudrate));
memset(ptr_stRCodeInfo->chRCodeCOM, '\0', sizeof(ptr_stRCodeInfo->chRCodeCOM));
memset(ptr_stRCodeInfo->chRCodeServerAddr, '\0', sizeof(ptr_stRCodeInfo->chRCodeServerAddr));

cout << "(stInitReaderInfo_CD*)i_StartAFCData)->chRCodeCOM):" << ((stInitReaderInfo_CD*)i_StartAFCData)->chRCodeCOM << endl;
strcpy(ptr_stRCodeInfo->chRCodeCOM, ((stInitReaderInfo_CD*)i_StartAFCData)->chRCodeCOM);

cout << ptr_stRCodeInfo->chRCodeCOM << " line:" << __LINE__ << endl; //只有这里是正确的

strcpy(ptr_stRCodeInfo->chRCodeBaudrate, ((stInitReaderInfo_CD*)i_StartAFCData)->chRCodeBaudrate);
cout << ptr_stRCodeInfo->chRCodeCOM <<" line:"<<__LINE__<< endl;
strcpy(ptr_stRCodeInfo->chRCodeServerAddr, ((stInitReaderInfo_CD*)i_StartAFCData)->chRCodeServerAddr);

cout << ptr_stRCodeInfo->chRCodeCOM << " line:" << __LINE__ << endl;
//cout << "(stInitReaderInfo_CD*)i_StartAFCData)->chRCodeCOM):" << ((stInitReaderInfo_CD*)i_StartAFCData)->chRCodeCOM << endl;
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************************************************<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
// cout << ((test*)i_StartAFCData)->chEquipNumber << endl;



// cout<<((stInitReaderInfo_CD*)i_StartAFCData)->chEquipmentNumber;
}

int main()
{

stInitReaderInfo_CD temp[2];


// strcpy(temp[0].chEquipNumber_, "aa");
temp[0].EquipWorkMode = 34;

strcpy(temp[0].Mode[0].chModeStartTime, "201804-=18");
strcpy( temp[0].chLineNumber, "nu");

strcpy(temp[0].chStationNumber,"st");
strcpy(temp[0].chEquipType,"tp");
strcpy(temp[0].chEquipNumber, "chn");
sprintf(temp[0].chRCodeBaudrate, "%d", 115200);
strcpy(temp[0].chRCodeCOM, "/dev/ttyS8");
strcpy(temp[1].chRCodeCOM, "/dev/ttyS9");

temp[1] = { 0 };

startReaderAFC(&temp);




}
`

Fork me on GitHub