目的:将一串字符转换为数字,并且可以将数字再转换回原字符串。
比如:将“afdf afa,faf 123456"转为数字num,同时可以实现将NUM转换为“afdf afa,faf 123456"
我觉得得用一个可逆的加密算法。不过以前没什么接触。请大家给个提示。

解决方案 »

  1.   

    取每个字符的unicode值string str = "afdf afa,faf 123456"
    int[] unicode = new int[str.Length];
    for(int i=0;i<str.Length;i++)
    {
       unicode[i] = (int)str[i];
    }我以前是对unicode每一位加上不同的值。比如unicode[0]加1,unicode[1]加2。诸如此类
    这样加密和解密都很容易。lz可以考虑更复杂的算法
      

  2.   

    string s="1";int i=Convert.ToInt(s);
    也能转换。
      

  3.   

    看字符集的大小,比如如果只有单字节字符,可以用1-127的ASCII码表示;
    如果是全部字符,用Unicode编码,字符集就大的多了
    如果可以限定字符的范围,可以用一个自定义编码,给每个字符编号
    只需一一对应即可
      

  4.   

    嗯实际上我说的不是一个字符的转换,而是一个字符串。而这个字符串的长度在20个字符左右。
    每一个都转换成ASC码那就是40个数字+。而这些数字是要存入数据库的。我得意思就是,有没有办法可以把生成的数字缩短长度。
      

  5.   

    而这些数字是要存入数据库的
    =================
    数字是不存入数据库的。
    加密过程:“a”(原始字符串)→ 97(unicode)→“b”加密后的字符→把“b”存入数据库
    加密后的字符串长度和原字符串相同
      

  6.   

    跳了一步。更正一下
    加密过程:“a”(原始字符串)→ 97(unicode)→97+1(加密过程)→“b”98所对应的字符→把“b”存入数据库
      

  7.   

    Int32.Parse 方法 将数字的字符串表示形式转换为它的等效 32 位有符号整数。
      

  8.   

    sanmu_bradley,你是不是在开玩笑!
    你想把任意一个字符串转换成一个数字,再由这个数字还原成字符串?
    如果可以这样,那么多人研究压缩算法干什么?硬盘做的那么大来干什么,够装几个数字就可以了嘛!
      

  9.   

    to wwwcampus
    我不知道你是没有明白我的意思还是你更本就没看上面大家的回复。
    To everyone
    我愿来得想法是生成数字以后看位数多少,让后减去一个固定的数字。实现长度缩小。不过这样需要作很多的判断。不如首先我得判断位数,还得判断各位的大小。最后还得作出一个统一的转换规则。这样我觉得太原始。不知道大家有没有什么思路提示我一下。
      

  10.   

    using System;
    using System.Collections.Generic;
    using System.Text;namespace zDit.Chinese
    {
        /// <summary>
        /// 字符串转换为byte数组的方法
        /// </summary>
        /// <param name="str">原字符串</param>
        /// <returns>编码结果</returns>
        public delegate byte[] str2bin(string str);
        /// <summary>
        /// byte数组转换为字符串的委托
        /// </summary>
        /// <param name="bin">原byte数组</param>
        /// <returns>解码结果</returns>
        public delegate string bin2str(byte[] bin);    /// <summary>
        /// 数据的编码与解码
        /// </summary>
        public static class Code
        {  
            #region 加码
            /// <summary>
            /// 对字符串加码
            /// </summary>
            /// <param name="str">原字符串</param>
            /// <param name="getBytes">加码方法</param>
            /// <returns>加码结果</returns>
            public static string StrToBin(string str, str2bin getBytes)
            {
                str = str.Replace("\u0000", "");
                byte[] charBin = getBytes(str);
                string result = "";
                foreach (byte hexNum in charBin)
                {
                    result += hexNum.ToString("X2");
                }
                return result;
            }        /// <summary>
            /// 对字符串加码(使用Encoding.Default.GetBytes方法)
            /// </summary>
            /// <param name="str">原字符串</param>
            /// <returns>加码结果</returns>
            public static string StrToBin(string str)
            {
                return StrToBin(str, Encoding.Default.GetBytes);
            }
            #endregion        #region 解码        /// <summary>
            /// 对字符串解码
            /// </summary>
            /// <param name="str">经过编码的字符串</param>
            /// <param name="getString">解码方法</param>
            /// <returns>解码结果</returns>
            public static string BinToStr(string str, bin2str getString)
            {
                byte[] charBin = new byte[str.Length >> 1];
                for (int index = 0; index < charBin.Length; index++)
                {
                    charBin[index] = byte.Parse(str.Substring(index << 1, 2), System.Globalization.NumberStyles.HexNumber);
                }
                return getString(charBin);
            }        /// <summary>
            /// 对字符串解码
            /// </summary>
            /// <param name="str">要解码的字符串</param>
            /// <returns>解码结果</returns>
            public static string BinToStr(string str)
            {
                return BinToStr(str, Encoding.Default.GetString);
            }
            #endregion
        }
    }
      

  11.   

    to yeerh
    多谢
    不过可不可以写详细一点
    比如
      函数public delegate byte[] str2bin(string str);
    以及
    byte[] charBin = getBytes(str);
     getBytes这个方法怎么实现的?
      

  12.   

    嗯实际上我说的不是一个字符的转换,而是一个字符串。而这个字符串的长度在20个字符左右。
    每一个都转换成ASC码那就是40个数字+。而这些数字是要存入数据库的。我得意思就是,有没有办法可以把生成的数字缩短长度。
    ===============================================================
    输入的字符有限制么?
    比如说,字符串只能是字母或者数字组成
      

  13.   

    to:不过可不可以写详细一点
    ----------------------------------------------
    首先 public delegate byte[] str2bin(string str);不是函数.
    而是定义的委托..byte[] charBin = getBytes(str);中.
    getBytes是传入的方法....
    可以是任何带一个string的参数,返回类型为byte[]的方法.
    比如
    Encoding.Default.GetBytes 就是符合条件的一个方法.要怎么实现这个方法.也完全可以由你自己写...
    很简单的.看一下委托就明白了..
      

  14.   

    可以 base 64 编码,然后再把字符串用十六进制表示
      

  15.   

    sanmu_bradley() ( ) 信誉:100    Blog  2006-10-15 19:21:37  得分: 0  
       
    嗯实际上我说的不是一个字符的转换,而是一个字符串。而这个字符串的长度在20个字符左右。
    每一个都转换成ASC码那就是40个数字+。而这些数字是要存入数据库的。我得意思就是,有没有办法可以把生成的数字缩短长度。
    ______________________________不太现实,除非允许输入的字符有限,那么你就可以用viena(维也纳nn)所说的方法,一一对应自己实现字符-->数字的转换.