posts - 3, comments - 2, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2012年6月25日

直接上代码:
 1 int CDlgPump::ChangeNum(CString str,int length)
 2 {      
 3     char  revstr[16]    = {0};                //根据十六进制字符串的长度,这里注意数组不要越界   
 4     int   nNum[16]        = {0};
 5     int   nCount        = 1;
 6     int   nResult        = 0;
 7 
 8     strcpy_s(revstr, str);
 9 
10     for(int i = length-1; i>= 0; i--)
11     {
12         if ((revstr[i] >= '0') && (revstr[i]<='9'))
13             nNum[i] = revstr[i] -48;            //字符0的ASCII值为48   
14         else if ((revstr[i] >= 'a') && (revstr[i] <= 'f'))
15             nNum[i] = revstr[i] - 'a' +10;
16         else if ((revstr[i] >= 'A') && (revstr[i] <= 'F'))
17             nNum[i] = revstr[i] - 'A' + 10;
18         else
19             nNum[i] = 0;
20         nResult = nResult+nNum[i]*nCount;
21         nCount  = nCount*16;                        //十六进制(如果是八进制就在这里乘以8)       
22     }
23     return nResult;
24 }
25 

posted @ 2012-06-25 11:09 BugYang 阅读(250) | 评论 (0)编辑 收藏

 1 #pragma once

 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 #include<iostream>
 6 
 7 class CStack
 8 {
 9 public:
10     CStack();
11     ~CStack();
12 public:
13     typedef struct QUEUE
14     {
15         int nHead;            //队头
16         int nTail;            //队尾
17         double* dbData;        //数据
18     };
19 
20     QUEUE m_queue;
21 
22     int m_nQueueSize;
23 
24 public:
25     bool SetFree();
26     bool SetArraySize(int nSize);
27     bool PutValue(double dbValue);
28     bool PopValue();
29     bool IsEmpty();
30     bool IsFull();
31 
32     int Size();
33     
34     double GetValue(int nPos);
35 };

//实现文件
#include "stack.h"

CStack::CStack()
{
    m_queue.nHead = 0;
    m_queue.nTail = -1;
}

CStack::~CStack()
{
}

bool CStack::SetFree()
{
    if(IsEmpty())
    {
        AfxMessageBox(_T("队列已空!"));
        return false;
    }
    else
    {
        m_queue.nHead = 0;
        m_queue.nTail = -1;
        delete m_queue.dbData;
    }

    return true;
}

bool CStack::SetArraySize(int nSize)
{
    m_queue.nHead = 0;
    m_queue.nTail = -1;
    m_queue.dbData = new double[nSize];

    m_nQueueSize = nSize;

    return true;
}

bool CStack::PutValue(double dbValue)
{
    if(IsFull())
    {
        for(int i = 0; i < m_nQueueSize -1; i++)
        {
            m_queue.dbData[i +1] = m_queue.dbData[i];
        }
        m_queue.dbData[0] = dbValue;
    }
    else if(IsEmpty())
    {
        m_queue.nTail++;
        m_queue.dbData[0] = dbValue;
    }
    else
    {
        m_queue.nHead++;
        m_queue.dbData[m_queue.nHead] = dbValue;
    }

    return true;
}

bool CStack::PopValue()
{
    if(IsEmpty())
    {
        AfxMessageBox(_T("队列已经为空!"));
        return false;
    }
    else
    {
        m_queue.dbData[m_queue.nHead] = 0;
        m_queue.nHead--;
    }

    return true;
}

bool CStack::IsEmpty()
{
    if(m_queue.nTail == -1)
        return true;
    else
        return false;
}

bool CStack::IsFull()
{
    if(m_queue.nHead - m_queue.nTail >= m_nQueueSize - 1)
        return true;
    else
        return false;
}

double CStack::GetValue(int nPos)
{
    if(nPos > m_nQueueSize - 1)
    {
        AfxMessageBox(_T("越界!"));
        return -1;
    }

    double dbValue = m_queue.dbData[nPos];

    return dbValue;
}

int CStack::Size()
{
    if(IsEmpty())
        return 0;

    int nSize = m_queue.nHead - m_queue.nTail +1;

    return nSize;
}

posted @ 2012-06-25 11:00 BugYang 阅读(398) | 评论 (0)编辑 收藏

不罗嗦,直接上代码(主要用数字除以16的商和对16取余进行判断,这个不是最高效的方法,在此抛砖引玉):
 1 unsigned char* CGetHexStringDlg::TQ_GetHexStringEx(unsigned int nNumber, unsigned int nCount)
 2 {
 3     unsigned char* pBuff = new unsigned char[nCount];
 4     memset(pBuff, '0', nCount);            //所有位置'0'
 5 
 6     static const char hex_map[] = "0123456789ABCDEF";
 7 
 8     int nRemainder    = 0;            //除16的余数
 9     int nConsult    = 0;            //除16的商
10     int nPos        = nCount - 1;    //指针位置
11     int nTimes        = 0;            //运算次数
12 
13     while (nPos >= 0)
14     {
15         nRemainder    = nNumber%16;
16         nConsult    = nNumber/16;
17 
18         if (nRemainder == 0)        //余数为0
19         {
20             if (nConsult != 0)        //商不为0
21             {
22                 if (nConsult >= 16)
23                 {
24                     nNumber = nNumber/16;
25                     nPos--;
26                 }
27                 else
28                 {
29                     nPos--;
30                     pBuff[nPos] = hex_map[nConsult];
31                     break;
32                 }
33             }
34             else                    //nNumber为0
35             {
36                 if (nTimes == 0)    //nNumber为0且运算次数为1
37                 {
38                     pBuff[nPos] = hex_map[0];
39                     break;
40                 }
41                 else
42                     break;
43             }
44         }
45         else
46         {
47             pBuff[nPos] = hex_map[nRemainder];
48             nNumber        = nNumber - nRemainder;
49         }
50 
51         nTimes++;
52     }
53 
54     pBuff[nCount] = NULL;
55 
56     return pBuff;
57 }

posted @ 2012-06-25 10:51 BugYang 阅读(1327) | 评论 (2)编辑 收藏