ue4获取所有mac地址

ue4 4.16版本中获取MAC地址的接口为FGenericPlatformMisc::GetMacAddressString

此接口在windows平台的实现是调用Win32接口GetAdaptersInfo,然后返回第一个mac地址,但如果需要获取所有mac地址,此接口就不满足了,但很容易根据此接口实现一个获取所有mac地址的接口,具体代码如下:

TArray<FString> FWindowsPlatformMisc::GetAllMacAddress()
{
	TArray<FString> Addresses;
	IP_ADAPTER_INFO IpAddresses[16];
	ULONG OutBufferLength = sizeof(IP_ADAPTER_INFO) * 16;
	// Read the adapters
	uint32 RetVal = GetAdaptersInfo(IpAddresses, &OutBufferLength);
	if (RetVal == NO_ERROR)
	{
		PIP_ADAPTER_INFO AdapterList = IpAddresses;
		// Walk the set of addresses copying each one
		while (AdapterList)
		{
			// If there is an address to read
			if (AdapterList->AddressLength > 0)
			{
				TArray<uint8> MacAddr;

				// Copy the data and say we did
				MacAddr.AddZeroed(AdapterList->AddressLength);
				FMemory::Memcpy(MacAddr.GetData(), AdapterList->Address, AdapterList->AddressLength);

				FString Address;
				for (TArray<uint8>::TConstIterator it(MacAddr); it; ++it)
				{
					Address += FString::Printf(TEXT("%02x"), *it);
				}
				Addresses.Add(Address);
			}
			AdapterList = AdapterList->Next;
		}
	}
	return Addresses;
}

此接口可以返回所有mac地址(经测试不包含禁用网卡的mac地址)

另外工作中需要返回所有mac地址生成的mac地址,来代表mac地址的唯一标示,代码如下:

FString UShooterGameInstance::GetMacAddress()
{
	const int MAC_ADDRESS_BYTE_LEN = 6;
	TArray<uint8> MacAddr;
	MacAddr.AddZeroed(MAC_ADDRESS_BYTE_LEN);

	TArray<FString> Addresses = FWindowsPlatformMisc::GetAllMacAddress();
	for (TArray<FString>::TConstIterator it(Addresses); it; ++it)
	{
		FString Address = *it;
		if (Address.Len() == MAC_ADDRESS_BYTE_LEN*2)
		{
			for (int Index = 0; Index < MAC_ADDRESS_BYTE_LEN; ++Index)
			{
				TCHAR* End = nullptr;

				TCHAR ConvBuffer[3];
				ConvBuffer[2] = TEXT('\0');
				ConvBuffer[0] = Address[Index*2];
				ConvBuffer[1] = Address[Index*2+1];

				uint8 Num = FCString::Strtoi(ConvBuffer, &End, 16);
				MacAddr[Index] += Num;
			}

			UE_LOG(LogOnline, Warning, TEXT("Mac Address:%s"), *Address);
		}
	}

	FString Result;
	for (TArray<uint8>::TConstIterator it(MacAddr); it; ++it)
	{
		Result += FString::Printf(TEXT("%02x"), *it);
	}
	UE_LOG(LogOnline, Warning, TEXT("After Caculate Mac Address:%s"), *Result);
	return Result;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值