繁体   English   中英

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

[英]Getting MAC address in c and writing it to a txt 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);
 }

这将完成您想要的操作,但是,如果您不只是打印文件的内容,而是实际想要对其进行处理,并且需要ASCII文本,则需要自己从宽字符进行转换。

由于此特定文件只是普通的字母和数字文本,因此您可以使用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;
}

它不是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 ++)显示正确的内容,因为它会自动设置正确的文本格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM