Получение MAC-адреса в c и запись его в текстовый файл - PullRequest
0 голосов
/ 12 января 2019

Ниже приведен мой код. В этой программе я использую системную функцию и вставляю аргумент командной строки, чтобы получить MAC-адрес компьютера, а затем записать его в текстовый файл. TXT-файл успешно создается. Но когда я пытаюсь открыть созданный текстовый файл, он ничего не показывает. Это показывает букву М и некоторые пробелы. Есть идеи, почему это происходит? Спасибо.

#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 голосов
/ 12 января 2019

Это будет делать то, что вы хотите, но если вместо того, чтобы просто печатать содержимое файла, вы действительно хотите что-то с ним сделать и вам нужен текст в виде 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;
}
0 голосов
/ 12 января 2019

Это не файл в кодировке 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 ++) показывает правильное содержимое, поскольку он автоматически устанавливает правильный текстовый формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...