首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HtoI [HexaDecimal to Integer] -使用Ascii代码

HtoI [HexaDecimal to Integer] -使用Ascii代码
EN

Stack Overflow用户
提问于 2012-09-06 20:07:30
回答 3查看 344关注 0票数 0

我做了以下代码,将十六进制转换为整数。我的算法

代码语言:javascript
复制
private static void ConvertFromBase16(string value)
    {
        value = value.ToUpper();
        int result = 0;
        int incrementor = 0;
        for (int i = value.Length-1; i >= 0; i-- )
        {
            char c = value[i];
            char number;
            if (c > 64)
            {
                number = (char)(c - 55); //Ascii character for A start from 65.in hex
                                        //its 10, so i have subtracted 55 from it.
            }
            else
            {
                number = (char)(c - 48); //Ascii character for 0 is 48, so subtracting 
                                         //48
            }
            int n = (int) number;
            result += (number* (int) Math.Pow(16 , incrementor));
            incrementor++;
        }

        Console.WriteLine(result);
    }

正如您所看到的,在上面的代码中,我使用ascii字符进行转换,而不是使用传统的case条件。我很怀疑,这是否会在所有操作系统上都有效,并产生适当的结果。

请有人建议我,这是不是正确的方法,不容易出错?

PS:我知道,使用带有全球化文化的.net默认库方法int.parse进行转换。为了学习数据结构的概念,我想手动完成这项工作。所以请不要在默认的.net库中发布任何有用的东西。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-06 20:16:15

您可以只使用字符本身来检查和减去,独立于实际的字符集。所以不是,举个例子

代码语言:javascript
复制
number = (char)(c - 48);

使用

代码语言:javascript
复制
number = (char)(c - '0');

这样,您就可以让框架/编译器为您完成与实际字符集的对话。这也是在C/C++中通常采用的方法。

一般来说,使用C#你不需要担心你的代码在“所有操作系统”下都能正常工作,因为无论如何它都只能在Windows上运行。但是如果默认字符集发生了变化,那么你的代码就会崩溃。

票数 0
EN

Stack Overflow用户

发布于 2012-09-06 20:17:29

您需要验证您的字符串是否只包含有效的十六进制数字,如果看到无效的十六进制数字,则抛出异常。

票数 0
EN

Stack Overflow用户

发布于 2015-12-15 22:31:08

这是我的实现public static uint UintFromHex(ref byte[] data, int offset, int len) { uint value = 0; byte number; byte d; for(int i = offset; i<offset+len; i++) { d = data[i]; if(d>=0x30 && d<=0x39) { number = (byte)(d-0x30); } else if(d>=0x41 && d<=0x46) { number = (byte)(d-55); } else if(d>=0x61 && d<=0x66) { number = (byte)(d-87); } else throw new ArgumentOutOfRangeException(); value += (uint)(number <<((len-i-1)*4)); } return value; }

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12299769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档