C#二进制、十进制、 汉字, 十六进制互转

       //十进制转二进制
  Console.WriteLine(Convert.ToString(69, 2));
  //十进制转八进制
  Console.WriteLine(Convert.ToString(69, 8));
  //十进制转十六进制
  Console.WriteLine(Convert.ToString(69, 16));
  //二进制转十进制
  Console.WriteLine(Convert.ToInt32(”100111101″, 2));
  //八进制转十进制
  Console.WriteLine(Convert.ToInt32(”76″, 8));
  //十六进制转十进制
  Console.WriteLine(Convert.ToInt32(”FF”, 16));

1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串
//十进制转二进制
Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, 2));
//十进制转八进制
Console.WriteLine("十进制166的八进制表示: "+Convert.ToString(166, 8));
//十进制转十六进制
Console.WriteLine("十进制166的十六进制表示: "+Convert.ToString(166, 16));
//二进制转十进制
Console.WriteLine("二进制 111101 的十进制表示: "+Convert.ToInt32("111101", 2));
//八进制转十进制
Console.WriteLine("八进制 44 的十进制表示: "+Convert.ToInt32("44", 8));
//十六进制转十进制
Console.WriteLine("十六进制 CC的十进制表示: "+Convert.ToInt32("CC", 16));

2.在串口通讯过程中,经常要用到 16进制与字符串、字节数组之间的转换

private string StringToHexString(string s,Encoding encode)
        {
            byte[] b = encode.GetBytes(s);//按照指定编码将string编程字节数组
            string result = string.Empty;
            for (int i = 0; i < b.Length; i++)//逐字节变为16进制字符,以%隔开
            {
                result += "%"+Convert.ToString(b[i], 16);
            }
            return result;
        }
        private string HexStringToString(string hs, Encoding encode)
        {
            //以%分割字符串,并去掉空字符
            string[] chars = hs.Split(new char[]{'%'},StringSplitOptions.RemoveEmptyEntries);
            byte[] b = new byte[chars.Length];
            //逐个字符变为16进制字节数据
            for (int i = 0; i < chars.Length; i++)
            {
                b[i] = Convert.ToByte(chars[i], 16);
            }
            //按照指定编码将字节数组变为字符串
            return encode.GetString(b);
        }


字符串转16进制字节数组
        /// <summary>
        /// 字符串转16进制字节数组
        /// </summary>
       /// <param name="hexString"></param>
        /// <returns></returns>
        private static byte[] strToToHexByte(string hexString)
        {
             hexString = hexString.Replace(" ", "");
           if ((hexString.Length % 2) != 0)
                 hexString += " ";
            byte[] returnBytes = new byte[hexString.Length / 2];
            for (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
         }
字节数组转16进制字符串
/// <summary>
        /// 字节数组转16进制字符串
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        public static string byteToHexStr(byte[] bytes)
       {
            string returnStr = "";
            if (bytes != null)
            {
                for (int i = 0; i < bytes.Length; i++)
                {
                     returnStr += bytes[i].ToString("X2");
                 }
             }
            return returnStr;
         }
从汉字转换到16进制
/// <summary>
        /// 从汉字转换到16进制
        /// </summary>
        /// <param name="s"></param>
        /// <param name="charset">编码,如"utf-8","gb2312"</param>
        /// <param name="fenge">是否每字符用逗号分隔</param>
       /// <returns></returns>
        public static string ToHex(string s, string charset, bool fenge)
        {
            if ((s.Length % 2) != 0)
            {
                 s += " ";//空格
                //throw new ArgumentException("s is not valid chinese string!");
             }
             System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset);
            byte[] bytes = chs.GetBytes(s);
            string str = "";
            for (int i = 0; i < bytes.Length; i++)
            {
                str += string.Format("{0:X}", bytes[i]);
                if (fenge && (i != bytes.Length - 1))
                {
                     str += string.Format("{0}", ",");
                 }
             }
            return str.ToLower();
         }
16进制转换成汉字
///<summary>
        /// 从16进制转换成汉字
        /// </summary>
        /// <param name="hex"></param>
        /// <param name="charset">编码,如"utf-8","gb2312"</param>
       /// <returns></returns>
        public static string UnHex(string hex, string charset)
        {
           if (hex == null)
                throw new ArgumentNullException("hex");
             hex = hex.Replace(",", "");
             hex = hex.Replace("\n", "");
             hex = hex.Replace("\\", "");
             hex = hex.Replace(" ", "");
            if (hex.Length % 2 != 0)
            {
                 hex += "20";//空格
             }
            // 需要将 hex 转换成 byte 数组。 
            byte[] bytes = new byte[hex.Length / 2];


           for (int i = 0; i < bytes.Length; i++)
            {
                try
                {
                    // 每两个字符是一个 byte。 
                     bytes[i] = byte.Parse(hex.Substring(i * 2, 2),
                     System.Globalization.NumberStyles.HexNumber);
                 }
                catch
                {
                    // Rethrow an exception with custom message. 
                    throw new ArgumentException("hex is not a valid hex number!", "hex");
                 }
             }
             System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset);
            return chs.GetString(bytes);
         }


<think>好的,我需要帮用户找到关于字符串与进制换的编程练习题和教程。首先,看看用户提到的引用内容,里面提到了不同进制的换方法,比如十进制二进制十六进制十进制,还有一些编程练习题,比如C#和Python的题目。用户可能希望得到具体的练习题推荐和解题方法。 先整理已有的引用信息。引用1提到了进制换的策略,包括换方向、方法如短除法和权重求和,以及练习运算。引用4和5涉及二进制十六进制十六进制十进制的具体题目,引用2和3是C#的练习题,但用户可能对Python更感兴趣,因为示例中有Python代码。 用户提到想在头歌平台找相关练习,但不确定是否有。可能需要提供通用的练习题和解法,或者推荐其他平台的资源。不过根据现有引用,可以结合已有的例子,比如二进制十六进制十进制其他进制等,设计一些练习题,并给出解题思路。 接下来,应该按照用户的要求生成相关问题,可能包括如何实现特定进制换的代码,或者如何处理字符串表示的数值换。需要确保回答结构清晰,分步骤解决问题,并引用提供的资料。 还要注意使用中文回答,数学公式用$...$,独立公式用$$...$$。检查是否有遗漏,比如用户需要编程练习的解法,可能需要提供代码示例,如Python或C#。但根据引用4中的Python例子,可以侧重Python解法。 最后,生成相关问题,确保问题与字符串和进制换相关,并基于已有的引用内容。例如,如何用Python实现二进制十六进制,或者如何处理大数的进制换等。</think># 字符串与进制编程练习指南 ## 一、进制换核心方法 1. **短除法换**:将十进制数反复除以目标进制基数并记录余数,例如十进制二进制: $$ N_{10} = b_k \times 2^k + \cdots + b_1 \times 2^1 + b_0 \times 2^0 $$ ```python def dec_to_bin(n): return bin(n)[2:] # 内置函数实现 ``` 2. **权重展开法**:将字符串按位权展开求和,例如二进制十进制: $$ 1101_2 = 1\times2^3 + 1\times2^2 + 0\times2^1 + 1\times2^0 = 13_{10} $$ 3. **分组换法**(二进制十六进制):每4位二进制对应1位十六进制[^4] ```python def bin_to_hex(s): return hex(int(s, 2))[2:].upper() ``` ## 二、典型编程练习题与解法 ### 练习1:实现任意进制换器(Python) ```python def base_converter(num_str, from_base, to_base): # 先十进制中间值 decimal = int(num_str, from_base) # 十进制目标进制 digits = "0123456789ABCDEF" result = [] while decimal > 0: result.append(digits[decimal % to_base]) decimal = decimal // to_base return ''.join(reversed(result)) if result else '0' ``` ### 练习2:处理大数进制换(字符串模拟) 当数值超过语言整数范围时,需直接操作字符串: ```python def str_base_convert(s, from_base, to_base): digits = "0123456789ABCDEF" # 先十进制(字符串运算) dec_value = 0 for c in s: dec_value = dec_value * from_base + digits.index(c.upper()) # 目标进制 if to_base == 10: return str(dec_value) res = [] while dec_value > 0: res.append(digits[dec_value % to_base]) dec_value //= to_base return ''.join(reversed(res)) if res else '0' ``` ## 三、进阶技巧 1. **错误处理**:添加非法字符检测 ```python def validate_input(s, base): valid_chars = "0123456789ABCDEF"[:base] return all(c.upper() in valid_chars for c in s) ``` 2. **性能优化**:预计算权值表(适用于频繁换场景) ```python precomputed_powers = {16: [1, 16, 256, 4096]} # 示例预计算16进制权值 ``` 3. **特殊格式处理**:带符号数、小数换(扩展IEEE754标准) §§ 1. 如何处理非整数数值的进制换? 2. 怎样优化超大数(如1000位)的进制换效率? 3. 不同编码格式(如UTF-8)对字符串换有什么影响? 4. 如何实现自定义字符集的进制换(如Base58)? 5. 进制换在密码学中有哪些典型应用场景?[^1][^4] : 引用1中提到的权重求和法与短除法是进制换的核心算法基础 [^4]: 引用4展示了二进制十六进制换的分组技巧 [^5]: 引用5演示了Java语言中的parseInt方法实现原理
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值