簡體   English   中英

在 xv6 中讀取 hex 文件

[英]hex file reading in xv6

我正在嘗試將此 xv6 c 文件修改為十六進制查看器。 我嘗試使用 printf(%02X) 但無濟於事。 我嘗試對 printf(%02X) 進行不同的放置組合,但它要么不打印十六進制,要么只在文件視圖末尾打印“%02X”。 對於 printf 功能,它指定這些輸入 arguments:打印到給定的 fd。 只理解 %d、%x、%p、%s。 void printf(int fd, const char *fmt, ...)這是我正在使用的代碼:

#include "types.h"
#include "stat.h"
#include "user.h"

char buf[512];

void
hex(int fd)
{
  int n;

  while((n = read(fd, buf, sizeof(buf))) > 0) {
   if (write(1, buf, n) != n) {
     printf(1, "hex: write error\n");
     exit();
     }
    printf(n,"%02X");
   } 
   if(n < 0){
     printf(1, "hex: read error\n");
     exit();
   }

}

int
main(int argc, char *argv[])
{
  int fd, i;

  if(argc <= 1){
    hex(0);
    exit();
  }

  for(i = 1; i < argc; i++){
    if((fd = open(argv[i], 0)) < 0){
      printf(1, "hex: cannot open\n", argv[i]);
      exit();
    }
    hex(fd);
    close(fd);
  }
  exit();
}

正如您發現的那樣,在 xv6 中, printf非常有限,您不能使用%02x修飾符。 您必須將自己限制在%x (或者您可以擴展printf function,但這是一項超出要求的練習。

對於每個字符,您必須調用printf(1, "%x ", the_character); 對於0x100xFF的字符,它將打印兩個字符,對於0x10以下的字符,您必須添加額外的0

-- 要逐個字符打印,您需要在read調用后獲得的緩沖區上進行for循環。 添加一些空間和 LF 以提高可見性,您就完成了。

void hex(int fd)
{
  char buf[16];

  int n, i;

  while((n = read(fd, buf, sizeof(buf))) > 0) {
    for (i = 0; i < n; ++i) {
        if (buf[i] < 0x10) {
            printf(1, "0");
        }
        printf(1,"%x ", buf[i]);
    }
    printf(1, "\n");
   } 
}

暫無
暫無

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

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