在c中获取MAC地址并将其写入txt文件

时间:2019-01-12 19:39:54

标签: c file

以下是我的代码。在此程序中,我使用系统功能并传递命令行参数以获取pc的mac地址,然后将其写入txt文件。 txt文件创建成功。但是,当我尝试打开创建的txt文件时,它什么也不会显示。它显示字母M和一些空格。知道为什么会这样吗?谢谢。

#include<stdio.h>

 int main()
 {

  system("wmic nic where (AdapterTypeId=0 AND netConnectionStatus=2) get MACAddress >macaddress.txt");
  FILE * fpointer=fopen("macaddress.txt","r");
  char buffer[500];
  while(!feof(fpointer)){
    fgets(buffer,500,fpointer);
    puts(buffer);
  }

  fclose(fpointer);
 }

2 个答案:

答案 0 :(得分:0)

这不是ASCII编码的文件。这是转储

            0  1  2  3   4  5  6  7   8  9  A  B   C  D  E  F
0000:0000  FF FE 4D 00  41 00 43 00  41 00 64 00  64 00 72 00   ■M.A.C.A.d.d.r.
0000:0010  65 00 73 00  73 00 20 00  20 00 20 00  20 00 20 00  e.s.s. . . . . .
0000:0020  20 00 20 00  20 00 20 00  0D 00 0A 00

等,以免透露我的MAC地址。

请注意,它也包含零,用fgets读取后将终止任何字符串输出。

我的文本编辑器(Notepad ++)显示正确的内容,因为它会自动设置正确的文本格式。

答案 1 :(得分:0)

这将执行您想要的操作,但是,如果您不只是打印文件的内容,而是要实际执行该操作,并且需要ASCII文本,则需要自己从宽字符进行转换。 / p>

由于此特定文件只是普通的字母和数字文本,因此您可以使用sprintf将宽字符串转换为窄字符串。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    system("wmic nic where (AdapterTypeId=0 AND netConnectionStatus=2) get MACAddress > macaddress.txt");
    //Binary mode tells fgetws to read wide characters instead of multi-byte.
    FILE * fp = fopen("macaddress.txt", "rb"); 
    if (fp)
    {
        wchar_t buffer[500] = { 0 };
        fread(buffer, 1, 2, fp); //read and discard BOM
        while (fgetws(buffer, 500, fp))
        {
            // %ls means the parameter is a wide string.
            // %S also works in Visual Studio
            printf("%ls", buffer);
            //Convert wide characters to ASCII
            //This assumes the wide characters are all in the ASCII range
            char ascii[500] = { 0 };
            sprintf(ascii, "%ls", buffer);
            printf("%s", ascii);
        }
        fclose(fp);
    }
    return 0;
}