Hirdetés
- bb0t: Ikea PAX gardrób és a pokol logisztikája
- GoodSpeed: A RAM-válság és annak lehetséges hatásai
- Luck Dragon: Asszociációs játék. :)
- GoodSpeed: Márkaváltás sok-sok év után
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- sziku69: Fűzzük össze a szavakat :)
- ldave: New Game Blitz - 2025
- Real Racing 3 - Freemium csoda
- Gurulunk, WAZE?!
- Brogyi: CTEK akkumulátor töltő és másolatai
Új hozzászólás Aktív témák
-
G.A.
aktív tag
válasz
buherton
#5850
üzenetére
Köszönöm a gyors választ.
dns_answer local_answer -> ez nincs használva.
dns_response -> nincs deklarálva.
local_dns_resp -> nincs deklarálva.
...
dns_answer** answer -> ezt nem használod semmire.A problémás kódrészt próbáltam leegyszerűsítve a hozzászólásba beírni, közben sikerült nekem is belezavarodnom és elírnom.
dns_answer local_answer = local_dns_resp
dns_answer** answer = *dns_responseu8b data[] -> ez nagyon csúnya.
Mitől csúnya? Inkább u8b* data legyen? Még előnybe részesítem a tömböket a pointerekkel szemben, mivel azokat könnyebben kezelem. 8bites uC-n is könnyebben nyomon tudom követni, hogy mennyi RAM-ot is használok...A struct-hoz erősen javaslok egy packed attribute-omot.
Hobbi programozóként nem tudom mit jelent... mire használható.Minek union?
Megint uC-re hivatkozok. Anno #define-t használtam egy tömb változóinak az azonosításához. Ezt cseréltem le unionba ágyazott struktúrákkal. Így értem:typedef union udpv4_header
{
struct
{
my_16b src_port;
my_16b dst_port;
my_16b length;
my_16b checksum;
};
u8b b[8];
}udpv4_header;
A struktúrát használom egy konkrét változó módosításához, majd ha másolom/küldöm az adatcsomagot akkor a b[]-t használom.miért is nem memcpy-k?
Szintén egy hiányosságom. Még nem tanultam meg a használatát...Közben szerintem meglett a megoldás(működik). Ez lett a function() módosított kódja:
void get_data_from_dns_reply(u8b* data, dns_header* dns_resp_header, dns_answer*& dns_response)
{
u8b i = 0;
for (; i < 12; i++)
{
dns_resp_header->b[i] = data[i];
}
dns_response = (dns_answer*)malloc(htons(dns_resp_header->answer_rrs.i) * sizeof(dns_answer));
for(; data[i] != 0; i++)
{
i += data[i];
}
i += 5;
for(u16b j = 0; j < htons(dns_resp_header->answer_rrs.i); j++)
{
i += 12;
for (u8b x = 0; x < 4; x++, i++)
{
dns_response[j].data.b[x] = data[i];
}
}
} -
G.A.
aktív tag
Üdv!
8Bites mikróvezérlőhöz írogatok kódot, amit VS 2015-ben (C++) tesztelek.
A vezérlőre írt kódot C-ben írom, de a teszthez használt segédfunkciókhoz C++-t is használok.A probléma:
globális struktúra (pontosabban union) tömböt(pointert?) szeretnék funkcióval manipulálni (méret megadása, adatokkal feltöltés)Kódban kifejezve:
typedef union dns_answer
{
struct
{
my_16b name;
my_16b type;
my_16b rrs_class;
my_32b ttl;
my_16b rd_length;
my_32b data;
};
u8b b[16];
}dns_answer;
void function(u8b data[], dns_answer** answer)
{
dns_answer local_answer;
*dns_response = (dns_answer*)malloc(data[7] * sizeof(dns_answer));
for(u8b i = 0; i < data[7]; i++)
{
for (u8b x = 0; x < 4; x++)
{
local_answer.data.b[x] = data[x];
//*dns_response[i].data.b[x] = data[x];
}
*dns_response[i] = local_dns_resp; // HIBA ITT
}
}
dns_answer* answer_array = NULL;
u8b data[512] = {};
int main(void)
{
...
function(data, &answer_array);
...
}Ezzel a kóddal jelenleg az a problémám, hogy:
Ha érkezik egy adatcsomag(DNS üzenet), ahol több válasz van (data[7] > 1), akkor a jelölt helyen (HIBA ITT)
áll meg a kód... Hibaüzenet: Access violation writing location 0x00000000Ha jól értem olyan címre akar írni, ami nem létezik. A hiba eredetét a malloc()-ra tippelem. Következtetésem az, hogy ha kihagyom a function()-ban a malloc()-ot és az inicializáláskor az int main() előtt megadom a tömb méretet, akkor nincs ez a hiba.
Hogyan méretezhetném újra a struktúra tömbömet (dns_answer* answer_array) a funkción belül, úgy hogy az globálisan is megvalósuljon?illetve., hogy kerülhetném ki a function()-ban az átmeneti lokális struktúra használatát?
-
G.A.
aktív tag
válasz
dabadab
#5302
üzenetére
Utánanéztem, hogy eddig melyiket is használtam a C vagy a C++ és ez elsővel szoktam a mikróvezérlőkre(AVR) kódot írni, WinAVR-el.
A C# most hirtelen azért kellett, mert egy USB átalakító chip-hez akartam egy parancssorban lefutható kódot írni, aminek a példa kódja C#-ben volt leírva.
GA
-
G.A.
aktív tag
válasz
bucsupeti
#5296
üzenetére
Üdv!
Akkor nincs egyszerűbb megoldás, végig kell zongorázni a karaktereken?
Erre jutottam:
int line_count = 0, byte_count = 0;
byte[] TXBuffer = new byte[262144];
byte[] hex_data = new byte[262144];
string text = System.IO.File.ReadAllText(@"L:\stk500.hex");
string[] textSplit = text.Split(':');
foreach (string line in textSplit)
{
line_count++;
foreach (byte character in line)
{
TXBuffer[byte_count++] = character;
}
}
for (int i = 0, x = 0, temp; i < byte_count; )
{
if(TXBuffer[i] <= 0x39)
{
temp = (TXBuffer[i] - 0x30)*16;
hex_data[x] += (byte)temp;
}
else if (TXBuffer[i] >= 0x41)
{
temp = (TXBuffer[i] - 0x37) * 16;
hex_data[x] += (byte)temp;
}
i++;
if (TXBuffer[i] <= 0x39)
{
temp = (TXBuffer[i] - 0x30);
hex_data[x] += (byte)temp;
}
else if (TXBuffer[i] >= 0x41)
{
temp = (TXBuffer[i] - 0x37);
hex_data[x] += (byte)temp;
}
i++; x++;
}Este még nem működött, mert ezek hex_data[x] += (byte)temp; helyett ezt hex_data[x] = (byte)temp; írtam... Jól éreztem, hogy rá kellett aludni egyet.
bucsupeti: köszönöm a segítséget!
GA
-
G.A.
aktív tag
Üdv!
A következőhöz szeretnék egy kis segítséget kérni.
Van egy ASCII karaktereket tároló stringem (19C020C01F) amit át szeretném vinni array-be, de úgy hogy a kapott array így nézzen ki: array = {0x19, 0xC0, 0x20, 0xC0, 0x1F}.
Ezt hogy lehet kivitelezni?
GA
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- TCL LCD és LED TV-k
- Milyen RAM-ot vegyek?
- ThinkPad (NEM IdeaPad)
- Router gondok
- Itt a Valve GŐZGÉP — Steam Machine, mi vagy te? 🧐
- Elektromos autók - motorok
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Outlaws + Handful of Missions: Remaster teszt
- Kicsomagoljuk és bemutatjuk a Poco F8 Ultrát
- Bemutatkozott a Poco X7 és X7 Pro
- További aktív témák...
- Szép! Lenovo Thinkpad T14s G2 Üzleti "Golyóálló" Laptop 14" -50% i7-1185G7 4Mag 16GB/1TB FHD IPS
- Szép! Lenovo Thinkpad T14s G2 Üzleti "Golyóálló" Laptop 14" -50% i7-1185G7 4Mag 16GB/512GB FHD IPS
- Dell PowerEdge T110 II PC, Xeon E3-1220 v2 CPU, 32 GB DDR3 RAM, 2 x 1 TB SAS HDD
- Lenovo Tab M10 HD 64GB, Kártyafüggetlen, 1 Év Garanciával
- HyperX Fury DDR4 - 3200 - CL16 - 16GB RAM (8GB x 2) RGB
- 16 GB-os Quadro RTX5000 HP
- BESZÁMÍTÁS! LENOVO Ideapad Gaming 3 notebook - R5 5600H 16GB DDR4 256GB +1TB SSD nVidia GTX 1650 4GB
- Bomba ár! Toshiba Portege X30-E - i5-8250U I 8GB I 256SSD I 14" FHD I Cam I W11 I Garancia!
- magyar billentyűzet - 121 - Lenovo Legion Pro 5 (16ARX8) - AMD Ryzen 7 7745HX, RTX 4070 - 4 év gar
- iKing - Apple iPhone 15 Pro Natural Titanium ProMotion 120 Hz, A17 Pro, USB-C 128 GB
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: Laptopműhely Bt.
Város: Budapest

