Hallo,
ich habe ein Problem. Ich möchte einen Byte-Wert aus einem Array in einen String umwandeln, damit ich diesen mithilfe von Slicing o.Ä. verändern.
byte liste[8]={B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111};
Mithilfe einer for-Schleife würde ich dann string = "B111111111";
erhalten wollen. Wie könnte man das umsetzen?
1 Like
diesemail:
B111111111
und welchem Zeichensatz möchtest du da zu grunde legen um aus einem Byte B111111111
genau welches Zeichen zu machen?
1 Like
Wie meinst du? Habe die frage nicht ganz verstanden
combie
January 9, 2023, 11:43am
6
Welchen Sinn das hat?
B111111111 ist was proprietäres und überflüssiges
Ich versuche ein Matrix modul anzusteuern und muss diese Werte abändern.
combie
January 9, 2023, 11:44am
8
Ich versuche ein Matrix modul anzusteuern und muss diese Werte abändern.
Nein!
Du fängst am falschen Ende an..
Wie soll ichs sonst umsetzten
combie
January 9, 2023, 11:47am
10
Egal....
Es gibt einige Möglichkeiten.
Es gibt keinen(?) Grund eine solch irrationale Zahlendarstellung zu nutzen.
Gibt es bessere Ideen byte liste[8]={B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111};
als so das Modul anzusteuern
Hallo,
die Binäre Form ist nur ein anderes Zahlensystem. Nur eine andere Darstellungsform.
B1111111 = 255 dezimal.
Damit kannst du ganz normal rechnen oder sonstwas machen.
liste[0] - 1 = 254
Was möchtest du denn an der Zahl ändern?
Um welches Modul handelt es sich denn überhaupt?
Ja das weiß ich. Ich würde es lieber lösen wie in Python, also mit so etwas wie str()
#include <LedControl.h>
Ja dann lass es und sei ruhig
Rentner
January 9, 2023, 12:01pm
16
Hallo,
so ganz hab ich noch nicht begriffen was Du vorhast und was der Sinn sein könnte. Allerdings könnte ich mir vorstellen das Dich bitRead(x, n)
eventuell weiter bringt
schau mal hier
The Arduino programming language Reference, organized into Functions, Variable and Constant, and Structure keywords.
Mit sowas könnte man in einer Schleife die einzelnen Bits abfragen und dann eine Zeichenkette aus 0 oder 1 zusammesetzen.
Heinz
1 Like
noiasca
January 9, 2023, 12:19pm
17
bitte beschreibe was du genau vor hast.
Weiters 3 Fragen für dich:
Woher kommen die Werte ?
B11111111
Wie sollen diese nach deiner Änderung aussehen?
Was soll mit den neuen Werten dann passieren?
combie
January 9, 2023, 12:28pm
18
TestProgramm:
#include <Streaming.h> // die Lib findest du selber ;-)
Print &cout = Serial; // cout Emulation für "Arme"
void setup()
{
Serial.begin(9600);
cout << F("Start") << endl;
cout << F("dezimal ") << B11111111 << endl;
cout << F("hexadezimal 0x") << _HEX(B11111111) << endl;
cout << F("oktal 0") << _OCT(B11111111) << endl;
cout << F("binär 0b") << _BIN(B11111111) << endl;
}
void loop()
{
}
Ausgabe:
Start
dezimal 255
hexadezimal 0xFF
oktal 0377
binär 0b11111111
Kai-R
January 9, 2023, 12:33pm
19
Umsetzen könnte man das wie folgt
constexpr byte MAX_LIST_INDEX {8};
constexpr byte MAX_BUFFER_SIZE{10}; // 8 Bitzeichen + 2 Wegen "B" uns String Ende Zeichen '\0'
void setup() {
Serial.begin(115200);
byte liste[MAX_LIST_INDEX]={B11111101,B11111001,B11111111,B11111111,B11111111,B11111111,B11111111,B11};
char buffer[MAX_BUFFER_SIZE];
for (auto element : liste) {
byteToCharArray(element, buffer, MAX_BUFFER_SIZE);
Serial.println(buffer);
}
}
void loop() {
// put your main code here, to run repeatedly:
}
void byteToCharArray(byte value, char* buf, byte max_buf_size) {
byte idx=max_buf_size;
buf[0] = 'B';
buf[--idx] = '\0';
for (byte i = 0; i < 8; ++i) {
buf[--idx] = ((value >> i) & 0x01) ? '1' : '0';
}
}
Ob es Sinn macht, muss noch geklärt werden.
1 Like
Kai-R
January 9, 2023, 12:48pm
21
Bin nicht böse
buf[--idx] = '0' + ((value >> i) & 0x01);
geht natürlich auch… ist schicker…
Wahrscheinlich wäre es auch noch besser, statt der 8 in der for Anweisung ein max_buf_size-2 reinzuschreiben. Usw.
combie
January 9, 2023, 12:58pm
22
Ja, besser geht fast immer, irgendwie.
Zur Not muss man eben den Begriff "besser" je nach Situation neu auslegen.
Ich persönlich halte B11111111 für ein total krankes Datenformat.
Es mag mal (halbwegs) sinnvoll gewesen sein, als C++ noch kein 0b11111111 konnte.
Aber heutzutage?
Die B11111111 sind Defines in der Arduino Welt.
Damit Per Se schon bedenklich.
Kaum ein Anderer tut das so.
Kai-R
January 9, 2023, 1:11pm
23
Des Menschen Wille ist sein Himmelreich. Wenn der TO es so möchte, habe ich halt einen Lösungsvorschlag unterbreitet.
Er wird schon merken ob es weiter hilft, oder ob das ein Holzweg ist.
Dennoch sind die Hinweise hier im Thread ja berechtigt. Evtl. regen die ja zum weiteren Nachdenken an….
Könnte ja sein.