Zeilenweiser Array-Index, Offset und Byteadresse
In einem 3×4×5-Array mit 8-Byte-Elementen ist die Position 1, 2, 3 das Element 33: Byte-Offset 264 und Adresse 4360 ab der Basis 4096. Jeder Zwischenschritt wird gezeigt, damit Sie Zeigerarithmetik prüfen oder einen flachen Puffer untersuchen können. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Rechenbeispiel
- Dimensionen
- 3, 4, 5
- Indizes
- 1, 2, 3
- Elementgröße (Bytes)
- 8
- Basisadresse
- 4.096
- Ordnung
- row-major
- Schrittweiten (Strides)
- 20, 5, 1
- Beiträge
- 20, 10, 3
- Linearer Index
- 33
Dieser Rechner wandelt Koordinaten eines mehrdimensionalen Arrays in die eindeutige lineare Position einer zusammenhängenden, zeilenweisen C-Speicherordnung um. Geben Sie die Dimensionen von der äußersten bis zur innersten Achse, den passenden nullbasierten Index jeder Achse, die Elementgröße in Byte und optional eine Basisadresse ein. Das Ergebnis zeigt die Schrittweite jeder Achse, jeden Indexbeitrag, den Element- und Byte-Offset sowie die endgültige Byteadresse und eignet sich zur Kontrolle von Zeigerarithmetik und abgeflachten Puffern.
Dimensionen und Indizes in gleicher Achsenfolge eingeben
Führen Sie die Dimensionsgrößen von der äußersten bis zur innersten Achse auf, genau wie in der Deklaration oder Array-Form. Für ein Array aus 3 Ebenen, 4 Zeilen und 5 Spalten geben Sie 3, 4 und 5 ein. Danach folgt für jede Dimension ein nullbasierter Index in derselben Reihenfolge.
Die Koordinate der zweiten Ebene, dritten Zeile und vierten Spalte lautet somit 1, 2 und 3. Dimensionsgrößen müssen positive Ganzzahlen sein; jeder Index muss mindestens null und kleiner als die zugehörige Dimension sein. Der Rechner weist abweichende Ränge und Koordinaten außerhalb der Grenzen zurück, anstatt unbemerkt eine Adresse außerhalb des Arrays zu erzeugen.
Auch die Elementgröße ist erforderlich, weil ein Elementindex allein noch keine Byteposition bestimmt. Verwenden Sie die tatsächliche Speicherbreite, etwa vier Byte für eine übliche 32-Bit-Ganzzahl oder acht Byte für einen double-Wert. Wenn Ihnen der Array-Anfang bekannt ist, tragen Sie diese nicht negative Basisadresse ein.
Andernfalls belassen Sie null und verstehen das Ergebnis als relativen Offset vom Anfang.
Die zeilenweise Schrittweitenberechnung nachvollziehen
Bei zeilenweiser Ordnung liegt die letzte Achse zusammenhängend im Speicher. Ein Schritt auf dieser Achse bewegt sich daher genau um ein Element, sodass ihre Schrittweite eins beträgt. Die Schrittweite jeder früheren Achse ist das Produkt aller rechts davon stehenden Dimensionen.
Bei 3 mal 4 mal 5 lauten die Schrittweiten 20, 5 und 1: Eine Ebene überspringt vier Zeilen mit je fünf Elementen, eine Zeile überspringt fünf Elemente und eine Spalte genau eines. Das Werkzeug multipliziert jeden Index mit der Schrittweite seiner Achse und gibt diese Produkte als Beiträge aus. Ihre Summe ergibt den nullbasierten linearen Index.
Für 1, 2 und 3 lautet die Rechnung 1 mal 20 plus 2 mal 5 plus 3 mal 1 und ergibt 33. Die Zwischenwerte machen das Ergebnis prüfbar und decken häufige Fehler wie umgekehrte Dimensionen oder spaltenweise Multiplikatoren auf. Sämtliche Operationen verwenden geprüfte Ganzzahlen.
Überschreitet ein Produkt oder eine Summe den sicheren JavaScript-Ganzzahlbereich, folgt ein Eingabefehler statt einer gerundeten Adresse.
Den Elementindex in eine Byteadresse umrechnen
Ein linearer Index zählt Elemente und keine Bytes. Für den Byte-Offset multiplizieren Sie ihn mit der Elementgröße. Das Element mit Index 33 beginnt bei acht Byte großen Elementen 264 Byte nach dem Array-Anfang.
Die Endadresse entsteht durch Addition dieses Offsets zur angegebenen Basisadresse: Bei der Basis 4096 beginnt das Element an Adresse 4360. Die Antwort hält linearen Index, Byte-Offset, Basis- und Endadresse getrennt, damit Sie jede Stufe mit Quellcode, Debugger, Binärformatspezifikation oder einer GPU-Pufferberechnung vergleichen können. Die Adresse wird als exakte Dezimalzahl innerhalb des sicheren Ganzzahlbereichs ausgegeben; der Rechner greift weder auf Speicher zu noch untersucht er einen laufenden Prozess.
Vorausgesetzt wird ein dichtes, zusammenhängendes Array ohne Zwischenraum zwischen Elementen oder Zeilen. Zeilen mit Pitch, explizite führende Dimensionen, Teilansichten oder benutzerdefinierte Schrittweiten benötigen ihre tatsächlichen physischen Werte.
Anwendungsfälle
Zeigerarithmetik kontrollieren
Prüfen Sie Element- und Byte-Offsets in C, C++, Rust oder WebAssembly, bevor Sie auf einen abgeflachten Puffer zugreifen.
Tensor-Abflachung debuggen
Vergleichen Sie erwartete zeilenweise Schrittweiten und Beiträge mit einer Tensorbibliothek, einem Serialisierer oder Datenaustauschcode.
Speicheranordnung vermitteln
Zeigen Sie, wie jede mehrdimensionale Koordinate zu einer zusammenhängenden Position und ihrer Endadresse beiträgt.
Häufige Fragen
Sind die Indizes nullbasiert?
Ja. Jeder Index beginnt bei null und muss kleiner als die Größe seiner Dimension sein.
Was bedeutet zeilenweise Ordnung?
Dabei ändert sich die letzte Array-Achse im zusammenhängenden Speicher am schnellsten, wie bei üblichen mehrdimensionalen C-Arrays.
Welche Basisadresse soll ich verwenden?
Verwenden Sie die Byteadresse des Array-Anfangs. Lassen Sie null stehen, wenn Sie nur einen relativen Offset benötigen.
Werden spaltenweise Arrays unterstützt?
Nein. Die Berechnung setzt bewusst zeilenweise Ordnung um; spaltenweise Speicherung verwendet eine andere Folge von Schrittweiten.
Werden Zeilenabstand oder eigene Schrittweiten berücksichtigt?
Nein. Vorausgesetzt werden dichte, zusammenhängende Elemente. Pitch, Padding, Transpositionen oder Ausschnitte erfordern reale physische Schrittweiten.
Beginnen die Indizes bei null?
Ja. Jede Achse zählt ab null, und jeder Index muss kleiner als die zugehörige Größe sein. Die zweite Ebene, dritte Zeile und vierte Spalte eines 3×4×5-Arrays sind also 1, 2 und 3.
Welche Basisadresse soll ich angeben?
Die Adresse, an der das Array im Speicher beginnt, falls Sie sie kennen. Ohne Angabe gilt null, und das Ergebnis ist dann der Abstand vom Anfang des Arrays, im Beispiel 264 Bytes.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/dev/array-rowmajor-index \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"dimensions":[3,4,5],"indices":[1,2,3],"element_size_bytes":8}'const res = await fetch("https://api.kit.forhosting.com/dev/array-rowmajor-index", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"dimensions": [
3,
4,
5
],
"indices": [
1,
2,
3
],
"element_size_bytes": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/array-rowmajor-index",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"dimensions": [
3,
4,
5
],
"indices": [
1,
2,
3
],
"element_size_bytes": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/array-rowmajor-index", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"dimensions":[3,4,5],"indices":[1,2,3],"element_size_bytes":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"dimensions":[3,4,5],"indices":[1,2,3],"element_size_bytes":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/array-rowmajor-index", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"dimensions": [
3,
4,
5
],
"indices": [
1,
2,
3
],
"element_size_bytes": 8
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.array_rowmajor_index",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_dimensions | 32 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Den Elementindex in eine Byteadresse umrechnen
Jede API-Anfrage kostet $0.002; für schnelle Prüfungen läuft dieselbe deterministische Berechnung im Browser.
Technische Fragen
Was kostet die Nutzung über die API?
Jede Anfrage kostet $0.002. Die Browserversion führt dieselbe deterministische Berechnung lokal aus.