簡體   English   中英

將十進制轉換為ASCII

[英]Convert Decimal to ASCII

我在使用reinterpret_cast時遇到困難。 讓我們馬上說,我還沒有結婚,還是reinterpret_cast。 隨時提出重大變化。 在向您展示我的代碼之前,我會讓您知道我要做什么。

我正在嘗試從向量中獲取文件名,該向量充滿了我設計的MIPS處理器正在使用的數據。 基本上我要做的是從處理器的測試程序中編譯一個二進制文件,將二進制文件中的所有十六進制轉儲到我的c ++程序中的向量中,將所有這些十六進制轉換為十進制整數,並將它們存儲在DataMemory向量中,該向量是數據我的處理器的內存單元。 我也有指令存儲器。 因此,當我的處理器運行諸如“打開文件”之類的SYSCALL指令時,我的C ++操作系統仿真器會收到一個指向數據存儲器中文件名開頭的指針。 因此請記住,數據存儲器中充滿了整數,字符串,全局變量,局部變量以及各種各樣的東西。 當被告知文件名從哪里開始時,請執行以下操作:

將指向的整個十進制整數元素轉換為其ASCII字符表示形式,然后從左到右搜索以查看字符串是否終止,如果沒有終止,則只需將每個字符連續加載到“文件名”字符串中即可。 這樣做直到字符串在內存中終止,然后將文件名存儲在表中。 我的困難是從內存中生成文件名。

這是我要執行的操作的一個示例:

C ++語法(切換純文本)

   1.Index Vector     NewVector   ASCII    filename
   2.0     240faef0   128123792   'abc7'   'a'
   3.0     240faef0   128123792   'abc7'   'ab'
   4.0     240faef0   128123792   'abc7'   'abc'
   5.0     240faef0   128123792   'abc7'   'abc7'
   6.1     1234567a   243225      'k2s0'   'abc7k'
   7.1     1234567a   243225      'k2s0'   'abc7k2'
   8.1     1234567a   243225      'k2s0'   'abc7k2s'
   9.            //EXIT LOOP//
  10.1     1234567a   243225      'k2s0'   'abc7k2s'

這是到目前為止我為獲取文件名而編寫的代碼(我只是將其應用於我的DataMemory向量的元素1000以測試功能。1000是任意的。):C ++語法(切換純文本)

   1.int i = 0;
   2.int step = 1000;//top->a0;
   3.string filename;
   4.char *temp = reinterpret_cast<char*>( DataMemory[1000] );//convert to char
   5.cout << "a0:" << top->a0 << endl;//pointer supplied
   6.cout << "Data:" << DataMemory[top->a0] << endl;//my vector at pointed to location
   7.cout << "Data(1000):" << DataMemory[1000] << endl;//the element I'm testing
   8.cout << "Characters:" << &temp << endl;//my temporary char array
   9.
  10.while(&temp[i]!=0)
  11.{
  12.     filename+=temp[i];//add most recent non-terminated character to string
  13.     i++;
  14.     if(i==4)//when 4 characters have been added..
  15.     {
  16.          i=0;
  17.          step+=1;//restart loop at the next element in DataMemory
  18.          temp = reinterpret_cast<char*>( DataMemory[step] );
  19.     }
  20. }
  21. cout << "Filename:" << filename << endl;

因此,問題在於,當我將十進制元素轉換為char數組時,我假設8個十六進制數字將給我4個字符。 為什么不是這種情況? 這是我的輸出:

C ++語法(切換純文本)

   1.a0:0
   2.Data:0
   3.Data(1000):4428576
   4.Characters:0x7fff5fbff128
   5.Segmentation fault

如果您的字符串以Null結尾,那么您不想

10. while(temp[i]!=0)

10. while(&temp[i]!=0)

雖然不確定我是否了解DataMemory結構...

對不起,但是代碼很亂。 如果要打印原始數據,則需要意識到nul-char實際上為零,這是原始數據中非常常見的值。

因此,打印原始字符串很可能會過早結束,因為將找到nul-char。

如前所述,測試可能應該是while(temp[i] != 0)而不是while(&temp[i] != 0) ,因為任何內存位置(內核外部)的地址都是!=,所以它永遠不會為假。 0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM