如题,是这样的,
定义CString dmac0;
unsigned char des[6];
des[6]是网卡的mac地址格式是:0xXX。
现在要输入dmac0=0x00;把dmac0赋值给mac。怎么转换啊?
求助于各位大虾了。帮助帮助我吧。
定义CString dmac0;
unsigned char des[6];
des[6]是网卡的mac地址格式是:0xXX。
现在要输入dmac0=0x00;把dmac0赋值给mac。怎么转换啊?
求助于各位大虾了。帮助帮助我吧。
解决方案 »
- 求介绍几个强度较高的可逆加密
- 调用dll中函数出现:HEAP[HFDC.exe]: Invalid Address specified to RtlValidateHeap( 01040000, 012C12C0 ) 错误提示!
- 需要Http协议实现的例子
- 接收到BMP数据显示的问题!
- 跟真彩工具条并不多,应该.
- 如何判断当前上网的方式是56KB MODEN 拨号上网方式 ?
- 请问所有的游戏动画用的都是贴图吗?
- 请问英文音标的字符如何获得?谢谢!(第一次提问请关照)
- 在msdn中为什么找不到CreateNewChild函数
- 如何设定非模态对话框的位置?
- 怎样改变tooltip位置
- COM接口中如何实现 [] 操作符
for(int i=0; i<6; i++)
des[i] = (unsigned char)dmac0[i];是这个意思吗
long strtol(const char *s, char **endptr, int radix)
将数值字符串转换成长整形格式数
s:待转换的浮点字符串,radix:转换的数制
endptr:转换后的尾数字符串
例子:
#include <stdlib.h>
#include <stdio.h> int main(void)
{
char *string = "10a1 ", *endptr;
long lnumber;
lnumber = strtol(string, &endptr, 16);
printf( "string = %s long = %ld ", string, lnumber);
return 0;
}
//mac地址6个字节dmac0 --> mac,是指更改网卡mac地址?
BOOL ParseMac(LPCTSTR pszMac, BYTE *p)
{
BYTE n,m;
for(int i=0;i<6;i++)
{
n = (*pszMac)&0xFF;
pszMac++;
m = (*pszMac)&0xFF;
if(n < 48 || n > 102 || m < 48 || m > 102) return FALSE;
if(n <= 57) n -= 48;
else if(n < 65) return FALSE;
else if(n <= 70) n-= 55;
else if(n < 97) return FALSE;
else n -= 87; if(m <= 57) m -= 48;
else if(m < 65) return FALSE;
else if(m <= 70) m-= 55;
else if(m < 97) return FALSE;
else m -= 87;
p[i] = (n<<4)|m;
pszMac++;
if(*pszMac == _T('-')) pszMac++;
if(!*pszMac) break;
}
return (i==6);
}
调用:
CString strMac(_T("001D-099C-3966"));
unsigned char des[6];
ParseMac(strMac, des);//des中的六个字节被填充!
{
BYTE n,m;
for(int i=0;i<6;i++)
{
n = (*pszMac)&0xFF;
pszMac++;
m = (*pszMac)&0xFF;
if(n < 48 || n > 102 || m < 48 || m > 102) return FALSE;
if(n <= 57) n -= 48;
else if(n < 65) return FALSE;
else if(n <= 70) n-= 55;
else if(n < 97) return FALSE;
else n -= 87; if(m <= 57) m -= 48;
else if(m < 65) return FALSE;
else if(m <= 70) m-= 55;
else if(m < 97) return FALSE;
else m -= 87;
p[i] = (n<<4)|m;
pszMac++;
if(*pszMac == _T('-')) pszMac++;
if(!*pszMac) break;
}
return (i==5);
}
unsigned char mac[6];
_stscanf(str, _T("%02u-%02u-%02u-%02u-%02u-%02u"), mac, mac + 1, mac + 2, mac + 3, mac + 4, mac + 5);这个意思?
建议楼主把你的输入和输出写清楚,比如:
输入:"5577a8e47f"
输出:
des[0]=0x55;
des[1]=0x77;
...如果是这样的,那么你参照 1 楼就可以了
那么我的程序就只能在我的机器上使用,现在我想在多台机器上也能使用,那么这个网卡的地址就得改变成手动输入的。
现在不知道怎么输入进去,
我用mfc做界面,定义dmac0,dmac1,dmac2,dmac3,dmac4,dmac5都是CString类型的.
然后输入dmac0=0x00,dmac1=0xe2,dmac2=0x56,dmac3=0x8f,dmac4=0x18,dmac5=0x26
赋值:des[0]=dmac0,des[1]=dmac1,......des[5]=dmac5.
不知道我描述的清楚不清楚,就是这样,请求帮助啊,谢谢了。
一楼的方法就可以了,强制转换过去即可。
注意 unsigned char 类型的范围是 0x00 - 0xff。
如下:
//转换地址成十进制长整形
char* end = NULL;
char* p = (char*)(LPCSTR) dmac0; // 只为获得指针,用(LPCTSTR)str
long lDes = strtol(p, &end, 16);//将16进制数-〉十进制数
end = NULL;
p = NULL; 之后,赋值给 des[0]=lDes,因为是高精度数字向低精度转化,所以编译器会提示警告,不必理会,事先必须保证你的输入数据大小是合适的范围。