Grüße,
Ich habe nach dem genannten Schema eine Funktion gebaut.
Es funktioniert, es ist aber echt langsam.
Für 10 MB braucht es 20 stunden.
private static List<int> ConvertDecimalToBase(BigInteger decimalValue, int baseTo)
{
List<int> baseValue = new List<int>();
while (decimalValue > 0)
{
int remainder = (int)(decimalValue % baseTo);
baseValue.Add(remainder);
decimalValue /= baseTo;
}
return baseValue;
}
public static List<int> ConvertBase256ToBase23(byte[] base256Array)
{
BigInteger value = 0;
for (int i = base256Array.Length - 1; i >= 0; i--)
{
value = value * 256 + base256Array[i];
}
return ConvertDecimalToBase(value, 23);
}
Ich danke für eure Unterstützung.
Ich bin wohl etwas durcheinander geraten.
Das Ziel sind Base23 zu Base256 und umgekehrt.
Ich habe mir das Horner-Schema angesehen, die Umsetzung macht mir aber noch Kopfzerbrechen.
Mfg.
Grüße,
es gibt ja sehr viele Methoden, wie man so was macht, das was ich gefunden habe bisher hat ein bestimmtes Problem aufgewiesen:
Sie wollten in dezimal umrechnen um dann auf eine andere basis umzurechnen.
Die daten welche ich umrechnen will, können auch 30Byte und weit mehr sein.
Leider ist meine "Lösung" leider gescheitert. Es gibt da ein rechen Fehler den ich grade suche.
Die Funktion gibt bei [2,11](Byte-Array) nicht wie erwartet WW als Ergebnis raus, stattdessen kommt CL(Hex 81) als Ergebnis.
Erläuterung : Hex 211 ist gleich 529 als dezimal zahl, was 23^2 entsprich und somit WW.
Falls dir bei deiner such eine Methode aufgefallen ist, die eventuelle das Problem mit dem Speicher nicht hat, wäre sehr hilfreich.
Mfg.
Grüße,
Ich versuche gerade ein Mathe problem zu lösen und mir raucht der Schädel.
Ich habe zwei listen einmal mit der Einheit Base256(Byte) und eine liste als aus Ausgabe mit der Einheit Base23.
Ich muss in beide Richtungen Konvertieren.
Der Daten typ Base23 ist als char array definiert und ist als Zeichen A-W definiert.
Ich habe eine Lösung mir ausgedacht, die mir aber Kopfschmerzen einbringt. Um genau zu sagen ist meine Haupt sorge ist der übertrag. Ich kann nicht abschätzen wann der platz. Das anderer ist die Skalierbarkeit. Ich kann die den Prozess nicht auf mehrere Threads aufteilen.
Die Rechnung wird benötigt um bytes in eine Farb-Kodierung umzurechnen.
Meine frage ist, gibt es eine bessere Lösung ?
Das ist meine erste variante :
const string Base23Table = "ABCDEFGHIJKLMNOPQRTUVW";
internal static string Base255ToBase23(byte[] base255)
{
List<int> result = new List<int>();
int carry = 0;
foreach (byte b in base255)
{
int value = b + carry * 255;
while (value > 0)
{
result.Add(value % 23);
value /= 23;
}
}
// Letzte Übertragsstelle hinzufügen, wenn sie größer als 0 ist
if (carry > 0)
{
result.Add(carry);
}
// Konvertiere die Liste von Indizes in die Base23-Zeichenkette
StringBuilder base23 = new StringBuilder();
foreach (int index in result)
{
base23.Append(Base23Table[index]);
}
return base23.ToString();
}
Grüße,
Danke dir, ich Tatsächlich einfach nur was wichtigen übersehen.
Jetzt funktioniert die Anmeldung.
Aber so oder so finde ich das die Googles Entwickler Konsole weniger übersichtlich und verständlich ist als Microsoft Azure Entwicklerkonsole.
Wo bei man wird bei Microsoft am Anfang erstmal in ein Tutorial gepresst wird, was den einstieg besser macht.
Und JA ich bin ein fan von der empirischen Vorgehensweise, normal komme ich damit super zurecht, aber ausnahmen gibt es natürlich immer.
Grüße,
Könntest du mal den Code zeigen, der dein Server baut und ausführt?
Ebenso wäre der StackTraces wäre auch interessant.
Mfg
Grüßt euch,
Ich habe gerade ein Problem und hoffe einer kann mich aufklären.
Ich wollte mir mal einen kleinen Bot schreiben, der meine Emails nach einem schlag Wort durchsucht, diese Email dann gegen ein Sprach-Modell wirft, auswertet ob es eine zusage oder absage ist und dann mir ein Termin erstellt.
Ja so weit die Idee...
Um das um zu setzen kam ich auf die Idee, die Google API zu nuten, da mein E-Mail Konto dort läuft.
Das ding ist, ich komme aber mit der Entwickler Konsole nicht zurecht.
Ich habe ein API Schlüssel aber... Wenn ich mein Test starte um den Login Vorgang zu testen, kommt, wenn ich mich versuche mich mit dem Konto versuche anzumelden, mit dem ich auch den Schlüssel beantragt habe, "Zugriff verweigert, das Projekt ist nicht freigegeben, nur Entwickler können es testen, wenden sie sich an den Entwickler"....
Ja... aber der bin ich doch... denke ich...
Hat wer ein Plan was ich machen muss?
Bei den Rollen habe ich auch kein Durchblick. Wenn bestimmte rechte einstellen muss? Wie mach ich das? Ich brauch E-Mail und Kalender zugriff.
Ich hoffe ihr könnt licht ins dunkel bringen.
Grüße,
Da Jetzt nichts kam habe ich mal nach was gesucht, und bin darauf gestoßen : https://stackoverflow.com/questions/1651406/programmatically-starting-an-http-server-in-c
Bin mir nicht so sicher ob das damit gemeint wurde. TLS/SSH bekam ich damit noch nicht zum laufen.
MfG
Warum Du den gezeigten Code mit Modulen etc umsetzt... versteh ich nicht.
Sowas kann man binnen weniger Zeilen mit ASP.NET Core direkt einfach, stabil, simpel machen und braucht nicht irgendwelchen (toten?) Libs.
Die Module übernehmen verschiedene Aufgaben. Das eine ist der SOAP Services und der andere ist die Web Oberfläche.
Mir fehlt es gerade die Vorstellung. Hast du dafür ein Beispiel?
Ich such ja nach einer API für https. im Grunde sollten die alle gleich sein, oder ?
ASP.net ist wenn ich es richtig sehe keine API sondern ein Services ähnlich wie PHP. Es ist schon ein kompletten Server mit Infrastruktur.
Griffen hingegen ist nur das https Protokoll. Ich übernehme die Infrastruktur. Sowas suche ich.
Du schreibst du weist nicht was das für ein Server ist. Was soll ich dir genauer beschreiben?
Das was jetzt folgt ist eigentlich alles, in dem fall sind paar Module nicht inbegriffen aber das web call Modul ist da voll abgebildet.
Und so wie ich es verstehe ist es ein einfacher Socket Server.
partial class InputServer
{
private volatile static DirectoryInfo serverDirInfo = new DirectoryInfo(ShareAndReceive.Properties.Settings.Default.ServerDir);
private HttpServer serverLinsener;
public InputServer()
{
DataProvisionServerModule mod = new DataProvisionServerModule(serverDirInfo);
mod.ItemEntrance += mod_ItemEntrance;
ModuleManager moduele = new ModuleManager();
moduele.Add(mod);
moduele.Add(new WebCallServerModul(serverDirInfo));
serverLinsener = new HttpServer(moduele);
serverLinsener.AllowedSslProtocols = System.Security.Authentication.SslProtocols.Ssl3;
}
private void mod_ItemEntrance(object sender, Item e)
{
if (ItemEntrance != null)
ItemEntrance(sender, e);
}
public event EventHandler<Item> ItemEntrance;
public void Start()
{
serverLinsener.Start(IPAddress.Any, 2241);
}
public void Stop()
{
serverLinsener.Stop();
}
//---------------------------------------------------------------------------------------------------------
internal class WebCallServerModul : HttpServerModulBase
{
private DirectoryInfo serverDirInfo;
public WebCallServerModul(DirectoryInfo serverDirInfo)
{
this.serverDirInfo = serverDirInfo;
}
public override void Get(Uri uri, Stream output, out int res, out long resL)
{
serverDirInfo.Refresh();
if (serverDirInfo.Exists)
{
FileInfo fileAdress = new FileInfo(serverDirInfo.FullName + uri.LocalPath.Replace("/", "\\"));
fileAdress.Refresh();
if (!fileAdress.Exists)
{
InterWebCall(uri, output, out res, out resL);
}
else
{
res = 0;
resL = 0;
}
}
else
{
Log.WriteLine(serverDirInfo.FullName + " - Not Exist");
InterWebCall(uri, output, out res, out resL);
}
Log.WriteLine($"Request - {uri.ToString()} > {res}");
}
public override void Post(Stream file, IPAddress quelle, Dictionary<string, string> parameter)
{
}
private void InterWebCall(Uri uri, Stream output, out int res, out long resL)
{
string regName = uri.LocalPath.Replace("/", "\\");
if (regName.Contains("upload"))
{
byte[] uploadPage = ShareAndReceive.Properties.Resources.upload;
output.Write(uploadPage, 0, uploadPage.Length);
resL = uploadPage.Length;
res = 200;
}
else if (regName.Contains("info"))
{
long i = output.Position;
XmlDocument infoXml = new XmlDocument();
XmlElement main = infoXml.CreateElement("Info");
XmlElement id = infoXml.CreateElement("ID");
XmlElement name = infoXml.CreateElement("Name");
id.InnerText = "1232";
name.InnerText = Dns.GetHostName();
main.AppendChild(id);
main.AppendChild(name);
infoXml.AppendChild(main);
infoXml.Save(output);
resL = output.Position - i;
res = 200;
}
else if (regName.Contains("ICON"))
{
long i = output.Position;
ShareAndReceive.Properties.Resources.SR.Save(output);
resL = output.Position - i;
res = 200;
}
else if (regName.Contains("background"))
{
long i = output.Position;
Random random = new Random();
switch (random.Next(1, 6))
{
case 1:
ShareAndReceive.Properties.Resources.Background1.Save(output, ImageFormat.Jpeg);
break;
case 2:
ShareAndReceive.Properties.Resources.Background2.Save(output, ImageFormat.Jpeg);
break;
case 3:
ShareAndReceive.Properties.Resources.Background3.Save(output, ImageFormat.Jpeg);
break;
case 4:
ShareAndReceive.Properties.Resources.Background4.Save(output, ImageFormat.Jpeg);
break;
case 5:
ShareAndReceive.Properties.Resources.Background5.Save(output, ImageFormat.Jpeg);
break;
case 6:
ShareAndReceive.Properties.Resources.Background6.Save(output, ImageFormat.Jpeg);
break;
default:
ShareAndReceive.Properties.Resources.Background1.Save(output, ImageFormat.Jpeg);
break;
}
resL = output.Position - i;
res = 200;
}
else
{
res = 404;
resL = 0;
}
}
}