47 votos

Comprobar una cadena para ver si todos los caracteres son valores hexadecimales

¿Cuál es la manera más eficiente en C# 2.0 para comprobar cada uno de los caracteres en una cadena y devuelva true si todas son válidas caracteres hexadecimales y false en caso contrario.

Ejemplo

void Test()
{
    OnlyHexInString("123ABC"); // returns true
    OnlyHexInString("123def"); // returns true
    OnlyHexInString("123g"); // returns false
}
bool OnlyHexInString(string text)
{
    // Most efficient algorithm to check each digit in C# 2.0 goes here
}

68voto

Jeremy Ruten Puntos 59989

Algo como esto:

(No sé C#, así que no estoy seguro de cómo el bucle a través de los caracteres de una cadena.)

loop through the chars {
    bool is_hex_char = (current_char >= '0' && current_char <= '9') ||
                       (current_char >= 'a' && current_char <= 'f') ||
                       (current_char >= 'A' && current_char <= 'F');

    if (!is_hex_char) {
        return false;
    }
}

return true;

Código de la Lógica de más Arriba

private bool IsHex(IEnumerable<char> chars)
{
    bool isHex; 
    foreach(var c in chars)
    {
        isHex = ((c >= '0' && c <= '9') || 
                 (c >= 'a' && c <= 'f') || 
                 (c >= 'A' && c <= 'F'));

        if(!isHex)
            return false;
    }
    return true;
}

60voto

CMS Puntos 315406
public bool OnlyHexInString(string test)
{
    // For C-style hex notation (0xFF) you can use @"\A\b(0[xX])?[0-9a-fA-F]+\b\Z"
    return System.Text.RegularExpressions.Regex.IsMatch(test, @"\A\b[0-9a-fA-F]+\b\Z");
}

25voto

Eoin Campbell Puntos 22861

Usted puede hacer un TryParse en la prueba de la cadena si la cadena en su totalidad es un HexNumber

Si es un particular cadena larga, que podría tomar en trozos y bucle a través de él.

// string hex = "bacg123"; doesn't parse
// string hex = "bac123"; parses
 string hex = "bacg123";
 long output;
 long.TryParse(hex, System.Globalization.NumberStyles.HexNumber, null, out output);

7voto

itsmatt Puntos 18905

Yo uso Int32.TryParse() para hacer esto. Aquí está la página de MSDN en él.

7voto

Robert Bernstein Puntos 288

Aquí está una LINQ versión de yjerem's solución anterior:

private static bool IsValidHexString(IEnumerable<char> hexString)
{
    return hexString.Select(currentCharacter =>
                (currentCharacter >= '0' && currentCharacter <= '9') ||
                (currentCharacter >= 'a' && currentCharacter <= 'f') ||
                (currentCharacter >= 'A' && currentCharacter <= 'F')).All(isHexCharacter => isHexCharacter);
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X