Considerar la cadena:obtener el valor ASCII de un carácter en una cadena de C#
string str="A C# string";
¿Cuál sería manera más eficiente de las salidas impresas en el valor ASCII de cada carácter en cadena usando C#.
Considerar la cadena:obtener el valor ASCII de un carácter en una cadena de C#
string str="A C# string";
¿Cuál sería manera más eficiente de las salidas impresas en el valor ASCII de cada carácter en cadena usando C#.
Aquí hay una alternativa, ya que no le gusta el elenco a int:
foreach(byte b in System.Text.Encoding.UTF8.GetBytes(str.ToCharArray()))
Console.Write(b.ToString());
Bueno, esto debería ser correcto si usa ASCII en lugar de UTF8 ... o si no obtiene los valores de ASCII, obtendrá los valores de UTF8 ... – Peter
@Petoj - Esto se extrae directamente de los documentos de MSDN al convertir a ascii. La forma "correcta" sería llamar a 'ConvertToUTF32()' ya que esa es la verdadera codificación de los propios caracteres. –
Puede extraerse de MSDN pero no estoy de acuerdo con usted en que es correcto, primero de ASCII solo contiene caracteres de 7 bits y UTF8 contiene mucho más y, en segundo lugar, algunos caracteres UTF8 se guardan como 2 bytes (o más) para que no sea capaz de determinar qué char es qué byte más ... – Peter
Sólo fundido cada personaje para un int:
for (int i = 0; i < str.length; i++)
Console.Write(((int)str[i]).ToString());
Eso no se limitará a ASCII, ¿o sí? – bzlm
+1 - También se puede repetir usando 'foreach (char c en str.ToCharArray())' –
¿Se está emitiendo de la única manera? –
Este ejemplo podría ayudarle. mediante el uso de fundición simple puede obtener el código detrás del personaje urdu.
string str = "عثمان";
char ch = ' ';
int number = 0;
for (int i = 0; i < str.Length; i++)
{
ch = str[i];
number = (int)ch;
Console.WriteLine(number);
}
Debido a que un 'string' es una secuencia de contado de UTF-16 unidades de código (una o dos de las cuales codifican un punto de código Unicode), esto hará que las unidades de código UTF-16. Los puntos de código son más legibles por humanos. Para obtenerlos, conviértelos a UTF-32 porque las unidades de código UTF-32 y los puntos de código Unicode son uno a uno y tienen los mismos valores. –
Aquí hay otra alternativa. Por supuesto, le dará un mal resultado si la entrada de carbón no es ascii. No he probado Perf pero yo creo sería bastante rápido:
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static int GetAsciiVal(string s, int index) {
return GetAsciiVal(s[index]);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static int GetAsciiVal(char c) {
return unchecked(c & 0xFF);
}
definen "más eficiente". :) También, posible duplicado de [Cómo obtener el valor ASCII de la cadena en C#] (http://stackoverflow.com/questions/400733/how-to-get-ascii-value-of-string-in-c). Además, ¿realmente te refieres a ASCII aquí? – bzlm
Bueno, técnicamente, los caracteres C# usan UNICODE, no ASCII. –