2009-04-20 68 views
2

我有一組6位,代表了7位ASCII字符。我如何從我擁有的6位中得到正確的7位ASCII碼?只需追加一個零並執行按位或?C/C++:如何6bit的ASCII碼轉換爲位的ASCII

感謝您的幫助。

倫納特

+0

您需要提供更多信息。你的6位數據來自哪裏? (LabView也許?) – 2009-04-20 21:40:55

回答

8

ASCII本質上是一個7位字符集,所以你有什麼不是「6位ASCII」。什麼字符組成你的字符集?最簡單的解碼方法可能是這樣的:

char From6Bit(char c6) { 
    // array of all 64 characters that appear in your 6-bit set 
    static SixBitSet[] = { 'A', 'B', ... }; 
    return SixBitSet[ c6 ]; 
} 

一個腳註:6位字符集是舊DEC硬件頗爲流行,其中一些,比如DEC-10,有36位架構,其中6位字符有一定意義。

+1

嘿,也許它與標準的「Contracted ASCII」同樣是非標準的「擴展ASCII」的反義詞。 – dreamlax 2009-04-20 13:19:48

2

你必須告訴我們的字符的6位的設置看起來如何,我不認爲這是一個標準。

做反向映射將可能只使用一個查找表,像這樣最簡單的方法:

static const char sixToSeven[] = { ' ', 'A', 'B', ... }; 

這假定空間被編碼爲(二進制)000000,大寫字母A爲000001,並等等。

您索引sixToSeven連同你的六千位人物之一,並獲得當地的7位字符回。

+1

實際上有多個6位字符標準。 DEC已被提及。甚至最初還有一個5位字符編碼標準:http://tamilelibrary.org/teli/history1.html – 2010-01-22 21:48:11

0

如果我給你一個位的值,我聲稱它是從Windows XP拍攝,你可以重建整個操作系統?

你不能。你失去了信息。沒有辦法重建,除非你有一些什麼丟失的知識。如果你知道這一點,比如最重要的一點被砍掉了,那麼你可以將它設置爲零,並且你已經正確地重構了至少一半的字符。

如果你知道如何「a」和「Z」在你的6位編碼來表示,您可能能夠在通過比較它們自己的7位表示除去什麼猜測。

1

最近只有6位代碼,我所知道的是BASE64。這使用四個6位可打印字符來存儲三個8位值(6x4 = 8x3 = 24位)。

的6比特的值從字符得出:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/ 

其是通的這些63.四(比如說UGF4)的值0用於表示3個8位值。

UGF4 = 010100 000110 000101 111000 
    = 01010000 01100001 01111000 
    = Pax 

如果這是你的數據是如何編碼的,有很多周圍的片斷將告訴您如何解讀它(和許多語言有編碼器和解碼器內置的,或者在包括庫)。維基百科有一篇好文章here

如果它是而不是 base64,那麼你需要找出編碼方案。一些較早的方案使用移入/移出(SI/SO)代碼的其他查找方法來選擇字符集內的頁面,但我認爲這對於選擇擴展(例如日本DBCS)字符而不是正常ACSII字符。

2

我無法想象爲什麼你會得到舊的DEC-10/20 SIXBIT,但如果這就是它,那麼只需添加32(十進制)。 SIXBIT採用以空格(32)開頭的ASCII字符,因此只需在SIXBIT字符中添加32即可獲得ASCII字符。