C#中将以0x开头的16进制字符串转换成对应的整数

有两种方法:

1. 要转换成有符号整数,使用 Convert.ToInt32(string, 16) ;

要转换成无符号整数,使用 Convert.ToUInt32(string, 16) 。

如果 16 进制的字符串不是以 0x 或 0X 开头,比如“af37”,用这种方法也能进行转换。

2. 要转换成有符号整数,使用 new System.ComponentModel.Int32Converter().ConvertFromString(string) ;

要转换成无符号整数,使用 new System.ComponentModel.UInt32Converter().ConvertFromString(string) 。

注意:

使用这种方法要进行强制类型转换。

如果 16 进制的字符串不是以 0x 或 0X 开头,不能用这种方法。

这两种方法对字母的大小写都不敏感,字符串以0X或0x开头都可以。对于16进制表示中可能出现的字符( 从a 到 f),用大写或小写表示都行,甚至是大小写混杂的表示形式也可以,比如像 0Xa3Bf2 这样的字符串能够被正确处理。

不管使用哪一种方法,都不要忘记要对可能抛出的异常进行处理。

下面给出一段示例代码:

/**************************************************
* Author: HAN Wei
* Author's blog: http://blog.csdn.net/henter/
* Date: April 22nd, 2015
* Description: demonstrate how to convert hexadecimal string
*              with leading 0x into integer
**************************************************/

using System;

namespace HexStringConvertToInt
{
    class Program
    {
        static void Main(string[] args)
        {
            string hexValue = "0Xa3Bf2b10";

            // Method 1:
            Console.WriteLine("Method 1:");
            int decValue = 0;
            try
            {
                decValue = Convert.ToInt32(hexValue, 16);
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred while converting!");
                Console.WriteLine("Error message: " + e.Message);
                Console.ReadLine();
                return;
            }
            Console.WriteLine("signed integer value: {0}", decValue);

            uint uDecValue = 0;
            try
            {
                uDecValue = Convert.ToUInt32(hexValue, 16);
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred while converting!");
                Console.WriteLine("Error message: " + e.Message);
                Console.ReadLine();
                return;
            }
            Console.WriteLine("unsigned integer value: {0}", uDecValue);
            Console.WriteLine();

            // Method 2:
            Console.WriteLine("------------------------------");
            Console.WriteLine("Method 2:");
            int iValue = 0;
            try
            {
                iValue = (int)new System.ComponentModel.Int32Converter().ConvertFromString(hexValue);
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred while converting!");
                Console.WriteLine("Error message: " + e.Message);
                Console.ReadLine();
                return;
            }
            Console.WriteLine("signed integer value: {0}", iValue);

            uint uValue = 0;
            try
            {
                uValue = (uint)new System.ComponentModel.UInt32Converter().ConvertFromString(hexValue);
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred while converting!");
                Console.WriteLine("Error message: " + e.Message);
                Console.ReadLine();
                return;
            }
            Console.WriteLine("unsigned integer value: {0}", uValue);
            Console.ReadLine();
        }
    }
}
时间: 2024-08-29 01:29:51

C#中将以0x开头的16进制字符串转换成对应的整数的相关文章

iOS 将16进制字符串转换成UIColor

#pragma mark - 将16进制字符串转换成 UIColor - (UIColor *)generateColorObjectWithHex:(NSString *)hexString { unsigned int red = 0, green = 0, blue = 0; NSRange range = {0, 2}; range.location = 0; NSString *redString = [hexString substringWithRange:range]; NSSc

将16进制字符串转换成16进制数据

var tb1 = Tb1.Text; if (string.IsNullOrEmpty(tb1)) { tb1 = "0000"; } var s1 = tb1.Substring(0, 2); var int_1 = Convert.ToInt32(s1, 16); var s2 = tb1.Substring(2, 2); var int_2 = Convert.ToInt32(s2, 16); var bt1 = Convert.ToByte(int_1); var bt2 =

iOS 16进制字符串转换成int十进制

NSRange rangeErr; rangeErr.location = 6; rangeErr.length = 2; NSString *strings = [value substringWithRange:rangeErr]; int errCode = (int)strtoul([strings UTF8String],0,16);  //16进制字符串转换成int NSString *ascStr = [NSString stringWithFormat:@"%c",re

C# 解析16进制字符串。将16进制字符串转换成明文字符串

将诸如 字符串 “73 6F 75 6E 64 34 2F 64 65 6D 6F 31 32 38 2E 6D 70 33 00” 转换成明文的方法 方法定义: private static string HexStringToString(string hexString, Encoding encoding = null) { if (string.IsNullOrEmpty(hexString)) return string.Empty; if (encoding == null) en

字节流、字符串、16进制字符串转换__Java(转)

Java代码   /** * @Package: * @ClassName:TypeConversion * @Description:字节流.字符串.16进制字符串转换 * @author:xk * @date:Jan 8, 2013 5:00:08 PM */ public class TypeConversion { /** * @Title:bytes2HexString * @Description:字节数组转16进制字符串 * @param b *            字节数组 *

16进制数据流转换成C语言数组

在开发中经常遇到以下情况,通过一些工具捕获的16进制数据,应用到代码中,比如通过Wireshark抓获的数据包,观察到的程序内存数据. 但是在开发时,不能直接使用这些数据,需要转换如下样子,才可以在代码中使用: 我写了一个小工具,可以将二进制数据流转换成数组,代码如下: // FileNameToArray.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include

c 16进制数组转换成ASCII字符串

char buf1[6]={0x11,0x22,0x33,0x44,0x55,0x66}; char buf2[20]; memset(buf2,0,20); for(int i=0;i<sizeof(buf1);i++) { sprintf(buf2 + strlen(buf2),"%02X",buf1[i]); } printf("buf2:%s\n",buf2);

Java字节数组和16进制字符串的互相转化

背景基础知识: 1.字符编码的相关知识(转自http://blog.csdn.net/llwan/article/details/7567906) 1.1. "字符"是由数字来表示的 先来重新了解一下计算机是如何处理"字符"的,这个原理是大家必须记住的,特别是在用JAVA写程序的时候,万万不可模糊.我们知道,计算机把任何东西都用数字来表示,"字符"也不例外.比如我们要显示一个阿拉伯数字"3",在我们的PC里,其实并不是仅仅用一

Java中byte与16进制字符串的互相转换

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L).即byte用十六进制表示只占2位. 同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上. 根据以上原理,我们就可