문제

이것은 16 진 문자를 정수 값으로 변환하지만 (서브) 문자열을 구성해야합니다.

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

.NET은 단일 16 진 문자를 새 문자열을 생성하지 않는 바이트 (또는 int, 중요하지 않은) 값으로 변환하는 내장 방법이 있습니까?

도움이 되었습니까?

해결책

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가 16 진수를 나타내는 한? 그게 기본 매개 변수의 지점이 아닌가?

문자열은 불변입니다. 새 문자열을 만들지 않고 색인 0에서 숯의 하위 문자열 값을 얻는 방법이 있다고 생각하지 않습니다.

물론 다른 문자열을 만들 필요없이 16 진수를 얻을 수 있습니다. 나는 그것이 당신을 실제로 얻을 수있는 것이 무엇인지 잘 모르겠지만, 성능은 현명합니다. 그러나 당신이 요청한 이후로, 당신이 요청한 내용은 다음과 같습니다.

    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;
            }
        }
    }

16 진수가 바이트 일 뿐이라는 것을 알고 있다면 int32로 변환 한 다음 캐스트

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

더 싼 것일 수 있습니다.

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

이것은 전체 문자열이 아니라 char []에 흥미로운 숯을 추가합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top