zoukankan      html  css  js  c++  java
  • 最近遇到的几个c++笔试题

    遇到了一个关于高地位字节序的问题,发现一般的c++笔试题上见到的不多,所以也研究下:

     1 /*
     2 *    写出下面的输出
     3 *
     4 */
     5 
     6 char cA[]={0x11,0x12,0x13,0x14,0x21,0x22,0x23,0x24};
     7 char cB[]={0x14,0x13,0x12,0x11,0x24,0x23,0x22,0x21};
     8 
     9 struct st
    10 {
    11     int a;
    12     int b;
    13 };
    14 
    15 void main()
    16 {
    17     st sa,sb;
    18     st * s1 = &sa;
    19     
    20     s1 = (st*)cA;
    21     cout << s1->a << endl;//336794129    //注意此处字节序 实际为 0x14,0x13,0x12,0x11
    22     cout << s1->b << endl;//606282273     //实际为 0x24,0x23,0x22,0x21
    23 
    24 
    25     st * s2 = &sb;
    26     s2 = (st*)cB;
    27     cout << s2->a << endl;//286397204   //注意此处字节序 实际为 0x11,0x12,0x13,0x14
    28     cout << s2->b << endl;//555885348   //实际为 0x21,0x22,0x23,0x24
    29 
    30     system("pause");
    31 
    32 }

    还有一个就是关于两个数组查找索引的笔试题:

      1 /*
      2 *    从cA内查找cB中的元素然后输出
      3 *    其中cB内的0xcc可以等于cA内的任何一个数
      4 *    其中cB内的最后一个数等于cA内的其中一个数加 1 类似“0x88”那就对应的是“0x89”
      5 */
      6 
      7 
      8 bool Func(unsigned char*,int,unsigned char*,int);//无符号的可以找到0xcc
      9 
     10 bool Func(char*,int,char*,int);//有符号的找不到0xcc //而又为什么我把0xcc换成0x10 就能找到呐?
     11 
     12 
     13 //???
     14 //其中有一个地方是:为什么我使用if(*(cB+2) == 0xcc ) 的时候 总是找不到 (如果数组cB是有符号数组)
     15 //如果我把cB类型换成无符号的就可以找到0xcc
     16 
     17 void main()
     18 {
     19     unsigned char cA[] = {0x80,0x34,0x55,0x73,0x56,0x45,0x32};
     20     unsigned char cB[] = {0x73,0x56,0xcc,0x33};
     21 
     22     char cE[] = {0x80,0x34,0x55,0x73,0x56,0x45,0x32};
     23     char cF[] = {0x73,0x56,0xcc,0x33};
     24     //char cF[] = {0x73,0x56,0x10,0x33};//0xcc 换成0x10 可以找到
     25     //char cF[] = {0x73,0x56,0x80,0x33};//0xcc 换成0x80 超过127 就会又找不到0x80
     26 
     27     char cC = 0xcc;
     28     int alen = sizeof(cA);
     29     int blen = sizeof(cB);
     30 
     31     int elen = sizeof(cE);
     32     int flen = sizeof(cF);
     33 
     34     bool bc = Func(cA,alen,cB,blen);    //使用无符号类型
     35 
     36     bool nc = Func(cE,elen,cF,flen);    //使用有符号类型
     37 
     38     if (bc)
     39     {
     40         cout<< "ok"<<endl;
     41     }else
     42     {
     43         cout << "no find" << endl;
     44     }
     45 
     46     system("pause");
     47 
     48 }
     49 
     50 bool Func(unsigned char* sc,int asize,unsigned char* dc,int bsize)
     51 {
     52     for (int i = 0;i<bsize;i++)
     53     {
     54         for (int j = 0;j<asize;j++)
     55         {
     56             if (*(dc+i) == 0xcc)
     57             {
     58                 cout<<"Find 0xcc = " << j<<endl;
     59                 continue;
     60             }else if (i == (bsize-1))
     61             {
     62                 if (*(dc+i) == (*(sc+j))+1)
     63                 {
     64                     cout << "find last item = " << j << endl;
     65                     continue;
     66                 }
     67             }else
     68             {
     69                 if (*(dc+i) == *(sc+j))
     70                 {
     71                     cout << "find other = " << j << endl;
     72                 }
     73 
     74             }
     75         }
     76     }
     77     return true;
     78 }
     79 
     80 bool Func(char* sc,int asize,char* dc,int bsize)
     81 {
     82     for (int i = 0;i<bsize;i++)
     83     {
     84         for (int j = 0;j<asize;j++)
     85         {
     86             
     87             if (*(dc+i) == 0xcc)    //同样的查找方式找不到0xcc
     88             //if (*(dc+i) == 0x10) //同样的查找可以找到0x10
     89             //if (*(dc+i) == 0x80) //同样的查找如果有符号超过127 就还是找不到0x80
     90             {
     91                 cout<<"Find 0xcc = " << j<<endl;
     92                 //cout<<"Find 0x10 = " << j<<endl;
     93                 //cout<<"Find 0x80 = " << j<<endl;
     94                 continue;
     95             }else if (i == (bsize-1))
     96             {
     97                 if (*(dc+i) == (*(sc+j))+1)
     98                 {
     99                     cout << "find last item = " << j << endl;
    100                     continue;
    101                 }
    102             }else
    103             {
    104                 if (*(dc+i) == *(sc+j))
    105                 {
    106                     cout << "find other = " << j << endl;
    107                 }
    108 
    109             }
    110         }
    111     }
    112     return true;
    113 
    114 }

    上面如果是有符号的类型的话,如果使用 临时变量 类似 char cTemp = 0xcc; 的话在if()语句中直接 *(dc+i) == cTemp; 同样也可以找到0xcc的 。c++研究的不深,望知道的给指点一下了。
    =========================================================

    又是苦逼的在找工作中。。。

    打个小广告:c/c++ 北京 3年开发经验 合适的话求内推荐求带走,谢谢大牛们啦~~~(可私信)

  • 相关阅读:
    docker 安装 mysql5.7
    docker 安装 redis
    docker 安装 gitlab
    docker 升级到新版本
    logstash 采集springboot 错误日志配置
    图片左下角添加水印
    frida动态修改
    反反frida调试
    IDA插件KeyPatch直接在IDA中修改arm指令
    frida调用制作dex(用于有些对象读取不了)
  • 原文地址:https://www.cnblogs.com/wainiwann/p/2958462.html
Copyright © 2011-2022 走看看