- Karácsonyfaként világíthat a Thermaltake új CPU-hűtője
- Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
- Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
Hirdetés
-
Dragon Ball: Sparking! Zero - Mester és tanítvány
gp Egyelőre még mindig nem kaptunk megjelenési dátumot a játékhoz.
-
Súlyos adatvédelmi botrányba kerülhet a ChatGPT az EU-ban
it Egyre nagyobb probléma az AI hallucinálása – most az osztrák adatvédelmi hatóság veheti elő a ChatGPT miatt az OpenAI-t, alapvetően a GDPR megsértése miatt.
-
Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
ph A Kereskedelmi Minisztérium egyelőre csak felméri a helyzetet, egyelőre nem látni, hogy tudnak-e bármit is tenni.
Új hozzászólás Aktív témák
-
Domonkos
Ármester
válasz summers #7650 üzenetére
Ez majdnem egy az egyben az utazo ugynok problema - nincs ra polinomialis ideju algoritmus.
Ha megis talalnal, akkor kuldj privatot - nagyon sok penzt fizetek erte
Brute force modszerrel meg nem erdemes elindulnod mert ~4840000000000000000000000000000000000000000000000000000 Joule energiara lesz szukseged hozza 70 ponthoz... Ez pedig sok. Ertelmes kozelitest viszont adhatsz.Gender of electrical connectors is defined by the pins.
-
szoke12
őstag
Sziasztok!
Keresgéltem a témában, de nem jutottam még megoldásra. A problémám, hogy a programomban van 3 usercontrol, és a főablakból szeretnék lefuttatni egy metódust az egyik controlban. Odáig eljutottam, hogy meghívjam, de megáll a futás és azt az üzenetet kapom, hogy "Az objektumhivatkozás nincs beállítva egyetlen objektumpéldányra sem."
A controlokat párhuzamosan hívom meg és egyszerre dolgozok bennük, és szeretnék mentést készíteni a pillanatnyi tartalmukból. A KablistaControl tartalmazza az ExportToCsv() metódust, ami egy lista elemeit kiírja egy csv fájlba. Ha a controlon belül hívom meg, minden rendben, elkészül a file, de ha a főablakból, akkor hiába van addigra feltöltve a lista, nem akarja. Mit csinálok rosszul?A meghívás:
(this.Parent as KablistaControl).ExportToCsv();"Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"
-
sirszevenap
őstag
Sziasztok.
Lenne itt esetleg olyan, aki kicsit otthon van a Xamarin.Forms-ba? Sajnos halott (ill inkább nincs) a topic ami ebben a témában mozog.
Köszi!
Bankkártyával? Hát persze!
-
szoke12
őstag
válasz Raftsman #7654 üzenetére
Köszönöm!
Mit jelent az, hogy castolni?Illetve újabb gondba ütköztem. Nem tudom, hogy kell használni a wait-ot. Próbáltam utánaolvasni, és néhány tesztet is csináltam, de megy tovább.
Az lenne a célom, hogy amikor fut a program, akkor addig várjon egy ponton, amíg az egyik változó értéke meg nem változik. Amit egy felugró ablakban változtatok meg.
Bár egyszerűbb lenne külön saját ablakot írnom, és azt meghívni, csak azt meg wpf-ben nem jöttem rá hogy kell. Illetve az ottani adatok elérésével vagyok bajban.
Bocsi, nagyon kezdő vagyok."Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"
-
harylmu
őstag
válasz szoke12 #7656 üzenetére
"Az lenne a célom, hogy amikor fut a program, akkor addig várjon egy ponton, amíg az egyik változó értéke meg nem változik."
Nem szívesen mondanám el, mert ha ilyet kell csinálnod, 90% hogy rossz az alkalmazás design-ja. Ha raksz be pár code snippetet (az egész is mehet pastebin.com-ra) akár tudunk segíteni, hogyan lehetne ezt normálisan.
[ Szerkesztve ]
-
szoke12
őstag
válasz harylmu #7657 üzenetére
Szia!
Köszönöm a választ! A kódomból ennyit érint a dolog:if (z == 0)
{
new Kerdezo().Show();
switch (z)
{
case 0: break;
case 1:
string ment;
ment = objKabel.attr3;
objKabel.attr3 = objKabel.attr4;
objKabel.attr4 = ment;
break;
case 3: break;
case 4:
objKabels.Clear();
return objKabels;
}
}
if (z == 2)
{
string ment;
ment = objKabel.attr3;
objKabel.attr3 = objKabel.attr4;
objKabel.attr4 = ment;
}Az program elején a deklarálom a z-t 0 értékkel. És egy felugró ablakban (Kerdezo) szeretném eldönteni, mennyi az értéke. Ugyanis az ablakban 4 lehetőségből kell választani, és annak fényében módosul a z. Itt pedig aszerint futna tovább a program hogy mennyi a z. Ha z=1 akkor javít egy bejegyzést, és utána megint lefut ez az egész ciklus és megint megkérdezi, hogy javítsa-e a következőt. Ha z=2, akkor mindet javítja automatikusan, ha 3, akkor azt az egyet kihagyja, de a többit megint megkérdezi, ha 4, akkor pedig kilép a metódusból.
Talán nem a legszebb megoldást választottam ehhez, de még csak gyakorolgatok.
És nekem az kéne, hogy a ciklus ne fusson tovább a switch-re, Hanem várja meg, amíg a Kerdezo bezárul.
De hogy a Kerdezo-ből hogy kapom meg az adatokat, meg hogy az hogyan változtatja a Usercontrol z-jét, még annak utánaolvasok....[ Szerkesztve ]
"Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"
-
harylmu
őstag
válasz szoke12 #7658 üzenetére
1. )Nagyon rosszak a naming conventionök. Mi az hogy z? Mi az hogy Kerdezo?
2.) Igen, a flow így nem igazán jó. Aszinkron lett, viszont szinkronnak kell lennie. Fontos, hogy a Show() után ne menjen tovább a kód.
a.)
public void ExecuteWhateverLogicOnZ(int z)
{
var dialogResult = new Kerdezo().ShowDialog();
//kezdj valamit a result-tal. lényeg hogy addig ne folytatódjon a kód amíg nincs eredménye a kérdezőnek.
}b.)
public void ExecuteWhateverLogicOnZ(int z)
{
if (z == 0)
{
new Kerdezo(this).Show();
return; //egyből kilépsz a metódusból
}
// more code here
}public class Kerdezo : Form
{
private OriginalForm _originalForm;
public Kerdezo (OriginalForm originalForm)
{
_originalForm = originalForm;
}
private void Form1_FormClosing(object sender, EventArgs e) //arra az eventre iratkozz fel amikor a z módosul
{
var result = sender as WhateverResult;
_originalForm.ExecuteWhateverLogicOnZ(result.Valasz);
}
}[ Szerkesztve ]
-
sztanozs
veterán
válasz sirszevenap #7655 üzenetére
Szerintem senki nincs igazán otthon, de írd be nyugodtan mi a gondod és majd együtt megpróbálunk rájönni
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sirszevenap
őstag
válasz sztanozs #7660 üzenetére
Igazából pitiáner dolognak látszódó dologról lenne szó (amire nem találok megoldást már 1 hónapja). A problémám a listview-val van. Expander listview, tehát van egy úgymond fejléce és arra tappolva jelenik meg a hozzá tartozó content majd újra tappra bezárul. Androidon tökéletesen működik, iOS-en képtelen normálisan lerenderelni a ViewCell méretváltozását és vibrálva jelenik meg. Értsd: Tappolás után lenyílik a content helye (felveszi a megfelelő méretet a ViewCell), ekkor a content elvan csúszva és amikor az "animáció" befejeződött és a ViewCell felvette a méretét akkor teszi bele a tartalmat, tehát amikor teljesen kinyílt. Ez ad vibráló hatást, ami nagyon zavaró. Androidon tökéletes. Gyakorlatilag ott ilyen lenyíló animáció sincs, csak megjelenik a tartalom minden sallang nélkül.
Itt pedig a teljes videót megnézhetitek, mi a pontos baj. Az iOS-re figyeljetek, hogy nyitogatja és zárja. Egy ilyen megoldást pl Én nem adnék ki a kezeim közül, pláne ne a storeok-ba: Expandable ListView in Xamarin Forms
Bankkártyával? Hát persze!
-
sztanozs
veterán
válasz sirszevenap #7661 üzenetére
Ennyit találtam neked:
http://www.telerik.com/forums/custom-cell-with-image-stutters-when-scrolling-on-android
Bár kicsit régi a thread, lehet, hogy ez is egy 'known limitation' még iOS-en.Amúgy add/remove helyett ezzel is kipróbáltad:
INotifyPropertyChanged
, ezzel is csinálja ezt az "összeomlasztást"?Ezt találtam még neked: [link]
- Avoid changing the cell layout based on the BindingContext. This incurs large layout and initialization costs.Custom Renderer: [link]
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sirszevenap
őstag
válasz sztanozs #7662 üzenetére
Természetesen csak ezzel dolgozom! Komplett hülyeségnek tartom állandóan törölni és újrahúzni a listát. Sajnos nem működik rendesen. Eleve probléma volt az elején, hogy ki sem nyílt (amint letekertem a listát majd vissza, akkor pedig már nyitva volt).Aztán ForceUpdateSize(); meghívásával ez megoldódott, viszont rohadt igénytelennek hat a az animáció iOS-en. Természetesen Androidon ez sem kellett. Van baj ezzel az iOS-el bőven. De köszönöm neked, hogy utánanéztél. Tudom egyébként mindenkinek ajánlani a Xamarin.Forms-ot, ilyen kisebb gyerekbetegségeitől eltekintve nagyon jó cucc. Szinte bármilyen utólagos munka nélkül képes ugyan úgy funkcionálni 4 platformon ez egyszem' kód! (Android,iOS,WP,UWP)
[ Szerkesztve ]
Bankkártyával? Hát persze!
-
sztanozs
veterán
válasz sirszevenap #7663 üzenetére
Custom Renderer-t is megnézted? Lehet, hogy csak le kellene tiltani a rendering animációt.
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
eddie17
addikt
Sziasztok!
Most tanulok szoftverfejlesztőnek és természetesen a fő csapásirány a C#.
Mivel előtte én nem foglalkoztam ezzel ezért nincs tapasztalatom benne, viszont szeretnék!
Nem tudom jó helyen írok, hogy bárki dolgozik olyan projekten amibe be lehet csatlakozni és tapasztalatot szerezni az szóljon!
Egy a lényeg nekem, hogy élesben is tudjak foglalkozni vele!
Privátban elértek ha adódna ilyen alkalom, amolyan "laborgyakorlat" címen.[ Szerkesztve ]
-
harylmu
őstag
válasz eddie17 #7666 üzenetére
Mi az hogy éles? Miért nem csinálsz valami kis saját gyakorló projektet pl githubon? Mondjuk valami eCommerce alkalmazás microservice-ekkel, ott aztán mindent tudsz gyakorolni. Docker, SPA frontend, backend, ORM stb. Microsoft-é jó kiinduló pont lehet.
Hogyha úgy érzed ez nem menne, akkor csinálhatsz csak egy szimpla MVC projektet is, az is tök jó gyakorlás.
[ Szerkesztve ]
-
szoke12
őstag
Az eddigi gondjaimat sikerült orvosolni, nagyon köszönöm! Most az lenne a kérésem, hogy hogyan tudok egy olyan toolbart készíteni, ami minden usercontrol esetén megfelelően viselkedik. Szóval van egy usercontrol, és amikor abban dolgozok, akkor a toolbar elmei arra a usercontrolra vonatkozó metódusokat hívják meg, amikor egy másikban, akkor pedig azokat.
Nem feltétlen kódrészekre lennék elsőkörben kíváncsi, inkább arra hogy ezt logikailag hogyan képzeljem el."Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"
-
nagyúr
Sziasztok!
Adott az MNB webservice, amin keresztül az árfolyamokat szeretném lekérni. WPF appban simán ment, viszont UWP alkalmazásban valahogy async kéne ezt megoldani és sehogy sem jutok dűlőre vele. Hogyan kéne kijavítanom az alábbi függvényt, hogy jól működjön?
public static async Task<List<Model.Currency>> GetList()
{
List<Model.Currency> currList = new List<Model.Currency>();
MNBService.MNBArfolyamServiceSoapClient client = new MNBService.MNBArfolyamServiceSoapClient();
MNBService.GetCurrentExchangeRatesRequestBody eRatesRequestBody = new MNBService.GetCurrentExchangeRatesRequestBody();
MNBService.GetCurrentExchangeRatesResponseBody eRatesResponseBody = await client.GetCurrentExchangeRatesAsync(eRatesRequestBody);
string eratesResp = eRatesResponseBody.GetCurrentExchangeRatesResult;
XmlDocument eRatesDoc = new XmlDocument();
eRatesDoc.LoadXml(eratesResp);
XmlNode rootNode = eRatesDoc.FirstChild;
XmlNode dayNode = rootNode.FirstChild;
foreach (XmlNode x in dayNode.ChildNodes)
{
if (x.Attributes.Item(1).InnerText == "USD") currList.Add(new Model.Currency { Name = "USD", Value = int.Parse(x.InnerText) });
if (x.Attributes.Item(1).InnerText == "EUR") currList.Add(new Model.Currency { Name = "EUR", Value = int.Parse(x.InnerText) });
if (x.Attributes.Item(1).InnerText == "GBP") currList.Add(new Model.Currency { Name = "GBP", Value = int.Parse(x.InnerText) });
}
await client.CloseAsync();
return currList;
}[ Szerkesztve ]
-
martonx
veterán
Ez a kód így ránézésre nem tűnik rossznak.
Tudom hit vita, de én az ennyire egyértelmű kilométer hosszú deklarációk helyett jobban szeretem a var-t használni. Az ilyen bedobott kódokon is sokat javít, ha nem kell annyit jobbra görgetniMi a konkrét gondod a kóddal?
Én kérek elnézést!
-
harylmu
őstag
Nekem lefut kicsit átalakítva.
1.) Nem int.Parse hanem double.Parse kell.
2.) Ahogy martonx írta, olvashatóság miatt inkább var-t használj.
3.) Illetve ezt kellett még átalakítani:var eRatesRequestBody = new ServiceReference1.GetCurrentExchangeRatesRequestBody();
var eRatesResponseBody = await client.GetCurrentExchangeRatesAsync(eRatesRequestBody);
var resultAsString = eRatesResponseBody.GetCurrentExchangeRatesResponse1.GetCurrentExchangeRatesResult;
XmlDocument eRatesDoc = new XmlDocument();
eRatesDoc.LoadXml(resultAsString);GetCurrentExchangeRatesAsync visszatérési értéke GetCurrentExchangeRatesResponse, nálad pedig ResponseBody.
De egyébként debuggert nem használsz?
[ Szerkesztve ]
-
nagyúr
Rendben, átírtam var-ra, így jobban olvasható.
Most így néz ki a két függvényem:
GetList()
public static async Task<List<Model.Currency>> GetList()
{
List<Model.Currency> currList = new List<Model.Currency>();
var client = new MNBService.MNBArfolyamServiceSoapClient();
var eRatesRequestBody = new MNBService.GetCurrentExchangeRatesRequestBody();
var eRatesResponseBody = await client.GetCurrentExchangeRatesAsync(eRatesRequestBody);
var result = eRatesResponseBody.GetCurrentExchangeRatesResponse1.GetCurrentExchangeRatesResult;
XmlDocument eRatesDoc = new XmlDocument();
eRatesDoc.LoadXml(result);
XmlNode rootNode = eRatesDoc.FirstChild;
XmlNode dayNode = rootNode.FirstChild;
foreach (XmlNode x in dayNode.ChildNodes)
{
if (x.Attributes.Item(1).InnerText == "USD") currList.Add(new Model.Currency { Name = "USD", Value = int.Parse(x.InnerText) });
if (x.Attributes.Item(1).InnerText == "EUR") currList.Add(new Model.Currency { Name = "EUR", Value = int.Parse(x.InnerText) });
if (x.Attributes.Item(1).InnerText == "GBP") currList.Add(new Model.Currency { Name = "GBP", Value = int.Parse(x.InnerText) });
}
await client.CloseAsync();
return currList;
}GetExchangeRates()
private void GetExchangeRates()
{
Task<List<Model.Currency>> task = Service.CurrencyService.GetList();
task.Wait();
var currencies = task.Result;
if(currencies != null)
{
foreach (Model.Currency curr in currencies)
{
if (curr.Name == "USD") this.Usd = curr.Value;
if (curr.Name == "EUR") this.Eur = curr.Value;
if (curr.Name == "GBP") this.Gbp = curr.Value;
}
}
}Ezzel így, konkrétan nem tölt be az alkalmazás.
Használok brakpointokat, a
task
-nál ezzel szembesülök:Result = "{Not yet computed}"
Értem, hogy nincs még meg az adat, csak ezt hogyan kezeljem?
És köszönöm mindenkinek a segítséget!
ui.: a Model.Currency Value értéke integer, nincs szükséges a tört részre
[ Szerkesztve ]
-
harylmu
őstag
Az
if (x.Attributes.Item(1).InnerText == "USD")
után tennék a helyedben egy entert és a breakpointot acurrList.Add(new Model.Currency { Name = "USD", Value = int.Parse(x.InnerText) });
sorba tenném. Ha beakadt a breakpoint nyomj egy F10-et és kapni fogsz egy exceptiont."a Model.Currency Value értéke integer, nincs szükséges a tört részre"
Akkor ügyesen parse-old.
[ Szerkesztve ]
-
nagyúr
válasz harylmu #7677 üzenetére
Valóban kaptam exceptiont Átírtam Double-re most hipp-hopp, így már a GetList() visszaadja azt a listát amit kell, viszont a
GetExchangeRates()
-el még mindig nem jó valami, mert kék képernyővel kiakad az app. Ha atask.Wait()
-től kikommentezek mindent akkor elindul, csak úgy nem sok értelme van -
nagyúr
No, kicsit átalakítottam.
private async Task GetExchangeRates()
{
await Task.Run(() =>
{
Task<List<Model.Currency>> task = Service.CurrencyService.GetList();
task.Wait();
var currencies = task.Result;
if (currencies != null)
{
foreach (Model.Currency curr in currencies)
{
if (curr.Name == "USD") this.Usd = curr.Value;
if (curr.Name == "EUR") this.Eur = curr.Value;
if (curr.Name == "GBP") this.Gbp = curr.Value;
}
}
});
}Viszont amire nem számítottam, hogy összeakad itt a
RaisePropertyChange
-el:public double Usd
{
get { return usd; }
set
{
usd = value;
RaisePropertyChanged("Usd");
}
}Aszongya:
An exception of type 'System.Runtime.InteropServices.COMException' occurred in System.Runtime.WindowsRuntime.dll but was not handled in user codeAdditional information: Az alkalmazás olyan objektumfelületet hívott, amely egy másik szálhoz volt rendelve. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
-
harylmu
őstag
Task.Run-ban 99%ban nem szabad semmit wrappelni. (+ link) Pláne hogy mégcsak async-á se tetted.
var currencies = await Service.CurrencyService.GetListAsync(); // naming convention: async metódus async-ra végződik
if (currencies != null)
{
foreach (Model.Currency curr in currencies)
{
if (curr.Name == "USD") this.Usd = curr.Value;
if (curr.Name == "EUR") this.Eur = curr.Value;
if (curr.Name == "GBP") this.Gbp = curr.Value;
}
}Ez hol hal meg? RaisePropertyChanged dob exceptiont? Illetve fingom sincs UWP-ban hogy van a szálkezelés, de tudtommal, ha UI controlt akarsz frissíteni másik threadről nem árt Dispatcher-t használni.
[ Szerkesztve ]
-
togvau
senior tag
Kezdő C#-osként egy URL-ről streamként olvasott fájlt kéne dekódolnom, ami AES 128bit kódolású.
Eddig ennyi, oda a ConvertToStream köré kéne a dekódolás.
var reader = new BinaryReader(new GZipStream(ConvertToStream(DB), CompressionMode.Decompress));
Java-ban van olyan, hogy "CipherInputStream", és ott elég egyszerű. De itt hogy?
[ Szerkesztve ]
hitler, sztálin, micro usb
-
sztanozs
veterán
Itt is van: CryptoStream, még példa is van a cikk alján.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
nagyúr
válasz harylmu #7682 üzenetére
Köszi a tippet, sikerült megoldani
public double Usd
{
get { return usd; }
set
{
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
usd = value;
RaisePropertyChanged("Usd");
}
);
}
}Más kérdés, hogy az UWP app-al pont azt nem tudom megvalósítani, ami kéne, mégpedig hogy folyamatosan látszódjon a kis appom minden más felett a sarokban. Nincs
topmost
funkció mint a WPF-ben -
togvau
senior tag
válasz sztanozs #7688 üzenetére
Valamennyire használható, de így sem dekódolja rendesen amit kéne.
Java-ban amiben működik a dekódolás ilyen a beállítása a dekódolónak:
AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
try
{
PBEKey key = (PBEKey)
SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1").generateSecret(new PBEKeySpec(new
String(kulcsbytearr).toCharArray(), salt, 7, 128));
SecretKey encKey = new SecretKeySpec(key.getEncoded(), "AES");
dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
dcipher.init(Cipher.DECRYPT_MODE, encKey, paramSpec);C# nem tudom mi ennek a secretkeynek a megfelelője, szóval java-ból kihoztam a végső kulcsot az enckey-ből.
static Stream DecryptStream(Stream cipheredStream, byte[] Key, byte[] IV)
{
// Check arguments.
if (cipheredStream == null/* || cipherText.Length <= 0*/)
throw new ArgumentNullException("cipherText");
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV");
Rijndael rijAlg = Rijndael.Create();
rijAlg.Key = Key;
rijAlg.IV = IV;
rijAlg.Mode = CipherMode.CBC;
//rijAlg.Padding = PaddingMode.PKCS7;
rijAlg.KeySize = 128;
ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV);
return new CryptoStream(cipheredStream, decryptor, CryptoStreamMode.Read);
}De nem stimmel a dekódolt anyag. Ilyen PKCS5 nincs is a C#-ban, csak 7
hitler, sztálin, micro usb
-
togvau
senior tag
válasz sztanozs #7691 üzenetére
Megnéztem. Keysize-ok stimmelnek. De elkezdtem ellenőrizgetni a keyeket.
Amíg sima byte[]-ban van a key, addig stimmel a C#-os a Javassal, de miutánRijndael rijAlg = Rijndael.Create();
rijAlg.Key = Key;
majd egyforeach (var b in rijAlg.Key)
{
sb.Append(String.Format("{0:x2} ", b));
}
System.Console.WriteLine(sb.ToString());Itt már tökmás a végeredmény... Ez hogy lehet?
[ Szerkesztve ]
hitler, sztálin, micro usb
-
sztanozs
veterán
Próbáld meg az AES-t (vagy AESManaged-et) használni a Rijndael helyett, és úgy felkonfigurálni, ahogy a példában van.
Ráadásul a Java-s megoldás nem közvetlenül a key-t használja, hanem egy abból derivált (PBKDF2WithHmacSHA1) kulcsot, amihez kell salt is:int iterations = 128;
Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(enc_key, salt, iterations);
byte[] key = rfc2898.GetBytes(32);Ezt próbáld meg illeszteni a kódodhoz.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
togvau
senior tag
válasz sztanozs #7693 üzenetére
Na most van valami siker, de már úgy megkavarodtam, hogy azt sem tudom hol vagyok. Szóval az egyik fő probléma az lehetett, hogy a java kódból másolt byte tömböt byte-ként deklaráltam és kezeltem, pedig a java byte-ja a C# sbyte-jának felel meg.
Na a lényeg, hogy ha kiíratom az első dekódolt 32 byteot javaban, és C#-ban, akkor stimmel mindegyik.De ezután kéne jönnie egy kicsomagolásnak Zlib alapon, ami nem megy, mert "An unhandled exception of type 'System.IO.InvalidDataException' occurred in System.dll
Additional information: The magic number in GZip header is not correct. Make sure you are passing in a GZip stream."Java-ban InflaterInputStream-en megy keresztül ami az Inflater() kicsomagolót használja, C#-nál a GZipStream-en menne át ha menne, mert elvileg a zlib, gzip, pkzip kompatibilis egymással.
A javas inflater dokumentációban viszont van egy ilyen: "If the parameter 'nowrap' is true then the ZLIB header and checksum fields will not be used. This provides compatibility with the compression format used by both GZIP and PKZIP. "Gondolom ezért C#-ban pár byteot ki kéne hagyni... de hol és mennyit...
Viszont van már DeflateStream is a .net-ben, ami full Zlib kompatibilis. Ez már más hibát ír ki "An unhandled exception of type 'System.IO.InvalidDataException' occurred in System.dll
Additional information: Block length does not match with its complement." akár akkor is ha egy ReadByte()-ot nyomok[ Szerkesztve ]
hitler, sztálin, micro usb
-
sztanozs
veterán
byte vs sbyte - a C# mindenhol byte-tal számol az sbyte csak speciális helyekre kell. De ha a Java tényleg signed byte-ot ad vissza (-128 - 127), akkor persze ezzel mókolni kell (de ez ugye csak reprezentáció - egy fájlba/stream-be mindegy, hogy byte-ként vagy sbyte ként írsz, a végeredmény ugyanaz lesz.
másrészt nekem úgy rémlik, hogy a GZip nem ZLib kompatibilis, nem is csodálkozom, hogy hibát dob.
A deflate pedig csak raw deflate bytestream-re használható, a headereket le kell vágni.ZIP-re külső csomagokat érdemes használni: [link]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
togvau
senior tag
válasz sztanozs #7695 üzenetére
köszi, sharpziplibel már simán megette (lehet nem véletlen, hogy szinte minden C# programnál ott figyel a sharpziplib dll), minden byte stimmel dekódolás, kicsomagolás után. De a Java-s stringet még mindig nem sikerült olvasni. Ha nyomok C# binaryreaderben egy readString()-et, akkor az eredmény semmi, még hibaüzenet sem. Ugyan ez readcharnál. Csak byteot olvasva jön ki értékelhető.
Java-ban writeUTF()-el van írva a fájlban, és persze readUTF()-el olvasható is.Olvastam róla hogy más az endianossága a c#-és a java-nak, de endianváltó libet is töltöttem, azzal se lehet byteon kívül mást olvasni, hogy legyen valami :\
[ Szerkesztve ]
hitler, sztálin, micro usb
-
sztanozs
veterán
-
togvau
senior tag
válasz sztanozs #7699 üzenetére
ANSI-t ír. De ez nem jelent semmit. Minden szerkesztőnél, szépen látszik az összes string, ANSI, és UTF-8 kódolásra állítva is. Még a hulladék windowsos sima notepadban is.
Az első string előtt van egy 00 31 hex és mintha mindegyik adat között lenne egy 00, de nem közvetlen az első string karakter előtt vagy a string után.hitler, sztálin, micro usb
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!