我有一个很长(22位)的纯数字组成的字符串,有没有办法把它压缩的短一点,也要求是纯数字组成,比如8位,要求压缩后不能改变唯一性,也就是说,如果22位的字符串不相等,那么8位的也一定不相等。
不知道有没有什么办法,请大家指点,谢谢!
不知道有没有什么办法,请大家指点,谢谢!
解决方案 »
- 请问win32中ReadFile函数怎么从Unicode编码的txt中读取数字
- 一个关于MFC对话框程序的简单问题(顶贴有分)
- HeapAlloc和malloc是工作在一个层次上面么? 到底有什么不同的地方?
- 请教一个使用windows mediaplayer 控件的问题
- 文件下载
- 屏幕共享 显存
- 关于工具栏按钮问题
- 请教:CString 类
- 如何在弹出的对话框中得到ListView的指针?
- 请问ScrollWindowEx()函数是否改变了客户窗口即视图的原点位置?
- 我登陆别人计算机,我想把我的用户名和密码拖进去,怎么实现
- 《STL原码分析》侯杰-----------有个问题想问问!!很简单的!!
谢谢你的建议但是这样转换,力度太小,16位的字符串转换以后还有10位,再转换还有9位,我希望转换的力度大一些,比如16可以转为8位甚至更少谢谢!
相当于用8位保存19位字符串。
这可能是最大的限度了。你也可以用三个LONG型来保存22位字符串。
#include <Stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <TCHAR.H>#pragma pack ( push, 1 )
class CNumber
{
public:
CNumber();
~CNumber();public:
BOOL Initialize(TCHAR* sz);
BOOL operator == (const CNumber& n);private:
WORD mHigh;
ULARGE_INTEGER mLow;
};
#pragma pack ( pop )CNumber::CNumber()
{
mHigh = 0;
mLow.QuadPart = 0;
}CNumber::~CNumber()
{
}BOOL CNumber::Initialize(TCHAR* sz)
{
if (sz != NULL)
{
TCHAR* pos = sz;
LONG Len = 0;
while (*pos != _T('\0'))
{
if (!::isdigit(*pos))
return FALSE;
Len++;
pos++;
}
if (Len == 0)
return TRUE; if (Len > 22)
return FALSE; if (Len > 19)
{
pos = sz + (Len - 20);
WORD Base = 1;
while (pos >= sz)
{
mHigh += ((::toupper(*pos) - _T('0')) * Base);
pos--;
Base *= 10;
}
} {
pos = sz + Len - 1;
ULONGLONG Base = 1;
while (pos >= (sz + (Len - 19)))
{
mLow.QuadPart += ((::toupper(*pos) - _T('0')) * Base);
pos--;
Base *= 10;
}
}
}
return TRUE;
}BOOL CNumber::operator ==(const CNumber& n)
{
if (mHigh == n.mHigh && mLow.QuadPart == n.mLow.QuadPart)
return TRUE;
return FALSE;
}int main(int argc, char* argv[])
{
printf("sizeof(CNumber) = %d\r\n", sizeof(CNumber)); CNumber n1;
if (!n1.Initialize(_T("8801234567890123456789")))
{
} CNumber n2;
if (!n2.Initialize(_T("1234567890123456789")))
{
} if (n1 == n2)
{
printf("n1 == n2\r\n");
}
else
{
printf("n1 != n2\r\n");
} CNumber n3;
if (!n3.Initialize(_T("8801234567890123456789")))
{
} if (n1 == n3)
{
printf("n1 == n3\r\n");
}
else
{
printf("n1 != n3\r\n");
}
return 0;
}
虽然你误解了我的要求,还是谢谢你!