是否有可能以二進制格式獲取字符串,整數等?我的意思是,假設我有字符串:以二進制表示形式獲取字符串,int等?
「你好」,我想它以二進制格式存儲,所以假設「你好」是
二進制11110000110011001111111100000000(我知道這不,我剛剛輸入某事很快)。
我可以將上面的二進制文件而不是作爲一個字符串,但與位的實際格式。
除此之外,它實際上可以存儲少於8位。我得到的是如果字母A是文本中使用的最頻繁的字母,我可以使用1位來存儲它與壓縮有關的信息,而不是構建二叉樹。
是否有可能以二進制格式獲取字符串,整數等?我的意思是,假設我有字符串:以二進制表示形式獲取字符串,int等?
「你好」,我想它以二進制格式存儲,所以假設「你好」是
二進制11110000110011001111111100000000(我知道這不,我剛剛輸入某事很快)。
我可以將上面的二進制文件而不是作爲一個字符串,但與位的實際格式。
除此之外,它實際上可以存儲少於8位。我得到的是如果字母A是文本中使用的最頻繁的字母,我可以使用1位來存儲它與壓縮有關的信息,而不是構建二叉樹。
是否有可能以二進制格式獲得字符串,整數, 等?
是的。有幾種不同的方法可以做到這一點。一種常用的方法是將MemoryStream從字節數組中取出,然後在該內存流的頂部創建一個BinaryWriter,然後將ints,bools,chars,strings等等寫入BinaryWriter。這將填充表示您寫入的數據的字節。還有其他方法可以做到這一點。
我可以將上述二進制不是作爲字符串存儲,而是以實際格式存儲在比特中。
當然,你可以存儲一個字節數組。
它實際上可以存儲少於8位。
否。C#中最小的存儲單元是一個字節。但是,有些類會讓您將一組字節視爲一組數據。您應該閱讀有關BitArray類。
謝謝,我會查看你的建議。 – Xaisoft 2009-10-02 05:15:07
你會假設什麼編碼?
這應該真的是一個評論 – 2009-10-01 21:06:51
同意,沒有代表但是;) – gn22 2009-10-01 21:07:41
在那裏,現在你做。 :P – 2009-10-01 21:30:03
你可以使用之類的東西:
Convert.ToBytes(1);
ASCII.GetBytes("text");
Unicode.GetBytes("text");
一旦你的字節,你可以做所有的位擺弄你想要的。在我們可以給你更多有用的信息之前,你需要一種算法。
我正在逐漸是,如果字母 A是 使用文本最頻繁的信,我可以用1位來存儲它 至於壓縮,而不是 建立二叉樹。
您正在描述的算法被稱爲Huffman coding。與你的例子相關,如果數據中經常出現'A',那麼該算法將簡單地表示爲'A'。如果'B'也頻繁出現(但比A少),該算法通常會表示'B' 「爲01.然後,其餘字符將00xxxxx ...等
在本質上,該算法對數據進行統計分析,並生成代碼,會給你最壓縮。
我們不得不在大學裏寫「Huff」和「Puff」,帶回回憶。 – 2009-10-01 21:32:08
所以它實際上可以存儲這種表示而不必構建二叉樹。 – Xaisoft 2009-10-01 21:34:13
存儲表示不需要構建二叉樹。但是,代碼通常以*視覺形式*表示爲二叉樹,因爲這樣更容易閱讀。 – 2009-10-01 21:36:56
字符串是實際存儲在二進制格式,都是字符串。
字符串和另一種數據類型之間的區別是,當你的程序顯示字符串時,它檢索二進制和示出了相應的(ASCII)字符。
如果你將數據存儲在一個壓縮的格式,你將需要分配每個字符超過1位。 哪個字符是mose頻繁?
如果1代表'A',0代表什麼意思? 所有其他字符?
您正在尋找的是類似於Huffman coding的東西,它用於表示較短的位模式下更常見的值。
如何存儲位代碼仍然限於整個字節。沒有使用少於一個字節的數據類型。您存儲可變寬度位值的方式是將它們首尾排列在一個字節數組中。這樣你就有了一系列位值,但這也意味着你只能從頭到尾讀取流,沒有像字節數組中的字節值那樣的隨機訪問值。
爲什麼downvote?如果你不說自己不喜歡什麼,那是毫無意義的...... – Guffa 2009-10-01 21:23:37
一個字符串只是一個結尾有空終止符的字節流。它已經是二進制格式。嘗試查找zlib進行壓縮。 – 2009-10-01 21:07:56