求内存数据转整形的c算法

对内存32字节的数据,也就是256位,以5位分割,计算其整形数值,如11111计算为31,
直到计算到250既可以,一共计算出50个整形保存到数组中,32字节是随机的,在内存中
都是0或1.限C语言实现。

你这个,我姑且理解为大整数除法和求余数,我之前刚好写过一个大整数类,贴出代码你看一下:
这样你可以声明一个大数,然后不断除32算余数和商

声明部分

 #define MAXN 9999  
#define MAXSIZE 10  
#define DLEN 4  

class HugeInt
{
private:
    int a[500];    //可以控制大数的位数   
    int len;       //大数长度  
    bool sign;
public:
    HugeInt(){ len = 1; memset(a, 0, sizeof(a)); }   //构造函数  
    HugeInt(const int);       //将一个int类型的变量转化为大数  
    HugeInt(const char*);     //将一个字符串类型的变量转化为大数  

        HugeInt operator/(const int   &) const;    //重载除法运算符,大数对一个整数进行相除运算  
        int    operator%(const int  &) const;    //大数对一个int类型的变量进行取模运算  

函数部分:

 HugeInt::HugeInt(const char*s)     //将一个字符串类型的变量转化为大数  
{
    int t, k, index, l, i;
    memset(a, 0, sizeof(a));
    l = strlen(s);
    if (s[0] == '-')
    {
        sign = false;
    }
    else sign = true;
    len = l / DLEN;
    if (l%DLEN)
        len++;
    index = 0;
    int end = 0;
    for (i = l - 1; i >= 0; i -= DLEN)
    {
        t = 0;
        k = i - DLEN + 1;
        if (k<0)
            k = 0;
        for (int j = k; j <= i; j++)
        {
            if (s[j] == '-')
            {
                t = 0;
                end = 1;
            }
            else
            {
                t = t * 10 + s[j] - '0';
            }
        }

        if (end == 1 && t == 0)
        {
            len--;
            return;
        }

        a[index++] = t;
    }
}

HugeInt HugeInt::operator/(const int & b) const   //大数对一个整数进行相除运算  
{
    HugeInt ret;
    if (b == 0) return ret;
    bool bsign = true;
    if (b < 0) bsign = false;
    if (sign == bsign) ret.sign = true;
    else ret.sign = false;
    int d = abs(b);
    int i, down = 0;
    for (i = len - 1; i >= 0; i--)
    {
        ret.a[i] = (a[i] + down * (MAXN + 1)) / d;
        down = a[i] + down * (MAXN + 1) - ret.a[i] * d;
    }
    ret.len = len;
    while (ret.a[ret.len - 1] == 0 && ret.len > 1)
        ret.len--;
    return ret;
}

int HugeInt::operator %(const int & b) const    //大数对一个int类型的变量进行取模运算      
{
    int i, d = 0;
    if (b == 0) return d;
    for (i = len - 1; i >= 0; i--)
    {
        d = ((d * (MAXN + 1)) % b + a[i]) % b;
    }

    if (!sign) d = -d;
    return d;
}

整数最大只能表示4个字节(32位)。你256位,要么就还是用数组保存着,要么转换成字符串。否则没办法表示。

uchar b[32];//32字节的数据
unsigned int p= (int)b;
int buf[50]=0;
for(i =0 ; i buf[i]= (p[i/8]>>((i%8)*5))&0x1f;
}