webForumDet fria alternativet

Förklara vad som händer

.NET

5 svar · 371 visningar · startad av Nickemannen

Medlem sedan aug. 20003 575 inlägg
Frågan#1

Någon som kan förklara lite som händer här.

jag vill vända på denna grejen.
buf är stringbuilder
cur är en bokstav. X är ett nummer i en For Loop
buf.Append(((sbyte)((cur & 0xF0) >> 4)).ToString("X"));
buf.Append(((sbyte) (cur & 0x0F)).ToString("X"));

Medlem sedan juni 20022 599 inlägg
#2

Någon som kan förklara lite som händer här.

Han omvandlar 1 ascii-tecken till 2 st tecken i sk AsciiHex.
Tex: "ä"=228 (ascii) -> "E4" (asciihex)

Du behöver alltså en funktion som omvandlar 2 st tecken i Asciihex tillbaka till 1 vanligt tecken. Tyvärr så har jag ingen sån i .NET, men jag har en gammal VB-funktion som du eventuellt kan porta eller titta på:

Function AsciHexToChar(ByVal sHex As String) As Variant
    Dim n As Integer, t As Integer, iTmp As Integer
    Const sHexTab = "0123456789ABCDEF"
    n = InStr(sHexTab, Mid(sHex, 1, 1))
    iTmp = (n - 1) * 16
    n = InStr(sHexTab, Mid(sHex, 2, 1))
    iTmp = iTmp + (n - 1)
    AsciHexToChar = Chr(iTmp)
End Function

Exempel:

AsciHexToChar("E4")->"ä"
Medlem sedan aug. 20003 575 inlägg
#3

Instr() motsvarar indexof ?

Medlem sedan aug. 20003 575 inlägg
#4

static string ascihextochar(string strHex)
{
int n = 0;
int intTemp = 0;

		string sHexTab = "0123456789ABCDEF";

		n = sHexTab.IndexOf(strHex.Substring(0,1));
		intTemp = (n)\*16;
		n = sHexTab.IndexOf(strHex.Substring(1,1));

		intTemp = intTemp + (n);
		
		
		return Convert.ToChar(intTemp).ToString();
	}

Så blir den i C# :D

Medlem sedan aug. 20003 575 inlägg
#5

Slutprodukt

Säg gärna till om ni vet hur jag kan optimera denna

		static string ascihextochar(string strHex)
		{
			int n = 0;
			int intTemp = 0;

			string sHexTab = "0123456789ABCDEF";
	
			n = sHexTab.IndexOf(strHex.Substring(0,1));
			intTemp = (n)*16;
			n = sHexTab.IndexOf(strHex.Substring(1,1));

			intTemp = intTemp + (n);
			
			
			return Convert.ToChar(intTemp).ToString();
		}

		static string depost(string destring) 
		{
			string strPattern = Convert.ToChar(61)+"[A-Z][0-9]";
			MatchCollection m = Regex.Matches(destring, strPattern);
			
			foreach (Match item in m) 
			{	
		destring = destring.Replace(item.Value,ascihextochar(item.Value.ToString().Substring(1,2)));
			}	
		
			return destring;
		}
Medlem sedan juni 20022 599 inlägg
#6

Tycker det ser bra ut och hyfsat optimalt.
Om du vill korta ner koden och lägga in lite felhanteringen så kan du skriva:

		static string ascihextochar(string Hex)
		{
			try
			{
				return Convert.ToChar(("0123456789ABCDEF".IndexOf(Hex.Substring(0,1))<<4) + "0123456789ABCDEF".IndexOf(Hex.Substring(1,1))).ToString();
			}
			catch
			{
				return "?";
			}
		}

Ifall du skulle råka få in tecken som inte ligger mellan "0" och "F".

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)