我在GPIO引腳上有一個覆蓋1.25MBaud的覆盆子pi位。樹莓派將在RS485通信網絡中模擬終端系統。所以希望這是物理層的工作:)C二進制流
我現在正在努力與應用層。 c代碼庫需要Ascii例如「Hello,world!」。我希望傳遞一個二進制流,即「111010111010001010111」,將會有5814位:)所以我一直在研究如何將二進制轉換爲ascii,但只發現複雜的C++答案。有沒有人有簡單的解決方案?謝謝你的幫助!
保羅
我在GPIO引腳上有一個覆蓋1.25MBaud的覆盆子pi位。樹莓派將在RS485通信網絡中模擬終端系統。所以希望這是物理層的工作:)C二進制流
我現在正在努力與應用層。 c代碼庫需要Ascii例如「Hello,world!」。我希望傳遞一個二進制流,即「111010111010001010111」,將會有5814位:)所以我一直在研究如何將二進制轉換爲ascii,但只發現複雜的C++答案。有沒有人有簡單的解決方案?謝謝你的幫助!
保羅
顯然你並不需要打破串入位的API會爲你....
無論如何,如果你這樣做:
每個字符在您的「hello world \ n「字符串是以ASCII編碼時的一個字節。 ASCII實際上只使用最低的7位。如果你想把一個字符分成幾個位,我會用下面的代碼作爲開始。
char ch = 'h';
for (i=0; i<7; i++) {
bool b = (ch & 1 == 1);
ch >>= 1;
// set the bit value b off to the pin....
}
你需要一個循環來處理整個字符串。
是不熟悉他正在使用的API。仍然代表着將字符分解成若干位的方法。 – AnthonyLambert 2015-02-23 15:58:02
我知道ascii是7位。我希望有830個ascii字符代表5814位。 – SerialMadMan 2015-02-23 16:02:52
830個字符但是5814位?那個怎麼樣? – 2015-02-23 16:09:58
對於移動7位ASCII碼字符到端口逐位,你可以使用:
void toPort(unsigned char x) {
x |= 0200; // Set unused high-bit to 1
for (; ;) {
char bit = x & 1;
x >>= 1;
if(x == 0) return;
push_to_port(bit);
}
}
「複雜的C++答案」 ......因此,這類型的答案並不複雜的嗎? (順便說一句,我發現了一些關於二進制,ascii和串行通信的一些基本誤解,你真的不需要轉換任何東西。) – 2015-02-23 15:39:29
我必須生成一個二進制流,然後將其轉換爲ascii然後傳入一個gpio引腳庫 – SerialMadMan 2015-02-23 15:42:50
Protip - 它是二進制的,一路下來。 – 2015-02-23 15:46:55