تحويل الطابع عرافة واحد إلى قيمة البايت في C #

StackOverflow https://stackoverflow.com/questions/1214980

  •  06-07-2019
  •  | 
  •  

سؤال

وهذا سيتم تحويل حرف 1 عشري إلى قيمة عددية، ولكن يحتاج إلى بناء (الفرعية) السلسلة.

Convert.ToInt32(serializedString.Substring(0,1), 16);

هل يكون صافي وسيلة المدمج في تحويل الطابع عرافة واحد لبايت (أو الباحث، لا يهم) القيمة التي لا تنطوي على خلق سلسلة جديدة؟

هل كانت مفيدة؟

المحلول

int value = "0123456789ABCDEF".IndexOf(char.ToUpper(sourceString[index]));

وأو حتى أسرع (الطرح مقابل بحث مجموعة)، ولكن لا التحقق لإدخال السيئة:

int HexToInt(char hexChar)
{
    hexChar = char.ToUpper(hexChar);  // may not be necessary

    return (int)hexChar < (int)'A' ?
        ((int)hexChar - (int)'0') :
        10 + ((int)hexChar - (int)'A');
}

نصائح أخرى

وتصحيح لي إذا ايم خاطئ ولكن يمكنك ببساطة استخدام

Convert.ToByte(stringValue, 16);

وطالما يمثل stringValue عدد عرافة؟ اليس ان وجهة المعلمتين القاعدة؟

وسلاسل هي ثابتة، وأنا لا أعتقد أن هناك وسيلة للحصول على قيمة فرعية بايت من شار في الفهرس 0 دون خلق سلسلة جديدة

وبالتأكيد يمكنك الحصول على قيمة عرافة دون الحاجة إلى إنشاء سلسلة أخرى. لست متأكدا ما سوف تكسب حقا لكم، والأداء الحكيمة، ولكن منذ طلبتم، وهنا ما كنت قد طلبت.

    public int FromHex(ref string hexcode, int index)
    {
            char c = hexcode[index];
            switch (c)
            {
                case '1':
                    return 1;
                case '2':
                    return 2;
                case '3':
                    return 3;
                case '4':
                    return 4;
                case '5':
                    return 5;
                case '6':
                    return 6;
                case '7':
                    return 7;
                case '8':
                    return 8;
                case '9':
                    return 9;
                case 'A':
                case 'a':
                    return 0xa;
                case 'B':
                case 'b':
                    return 0xb;
                case 'C':
                case 'c':
                    return 0xc;
                case 'D':
                case 'd':
                    return 0xd;
                case 'E':
                case 'e':
                    return 0xe;
                case 'F':
                case 'f':
                    return 0xf;
                case '0':
                default:
                    return 0;
            }
        }
    }

إذا كنت تعرف قيمة عرافة ليست سوى بايت فقط ثم تحويله إلى Int32 ثم يلقي

var b = (byte)(Convert.ToInt32(serializedString, 16));
Encoding.UTF8.GetBytes( serializedString.ToCharArray(), 0, 1)

وأرخص قد تكون:

Encoding.UTF8.GetBytes( new char[]{ serializedString[0] }, 0, 1)

وهذا سيضيف فقط شار المثير للاهتمام أن شار [] وليس السلسلة بأكملها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top