程序代码:
/*
http://bbs.bccn.net/thread-439278-1-1.html
问题:我有16个地址从0xE0到0xFE,我想通过一个条件判断哪些地址是可用的,哪些是不可用的,可用的地址为1,不可用
的为0,例如,通过判断只有0xE0和0xFe可用,那么应该得到1000000000000001,然后可以作为返回值使用
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
/*
地址状态数据结构:
nAddress -- 地址偏移量
strStatus -- 所有地址的状态值字符串
注:为适应不确定数目的地址,此处设计为用动态分配内存方式生成字符串strStatus。若希望回避动态分配内存,可设定strStatus为
足够大的数组,比如char strStatus[16]这样的,不需留结束符,有效的地址数目由nAddress值决定
*/
struct Status
{
size_t nAddress;
char* strStatus;
};
void Pause(void);
Status SetStatus(const char* strStatus);
int main(void)
{
Status theStatus = SetStatus("1000000000000001");
for (size_t index = 0; index < theStatus.nAddress; ++index)
{
printf_s("0x%02X = %1d\n", 0xE0 + index, theStatus.strStatus[index]);
}
delete [] theStatus.strStatus;
Pause();
return EXIT_SUCCESS;
}
void Pause(void)
{
printf_s("\nPress any key to continue...");
_getch();
}
// 重点:看明白这个函数是怎么生成状态字符串的并返回的,即知如何应用到自己的程序中
Status SetStatus(const char* strStatus)
{
Status retStatus;
retStatus.nAddress = strlen(strStatus);
retStatus.strStatus = new char[retStatus.nAddress];
for (size_t index = 0; index < retStatus.nAddress; ++index)
{
// 每个地址的状态以数值0和1表示
retStatus.strStatus[index] = strStatus[index] - '0';
}
return retStatus;
}