1. 程式人生 > 其它 >檢視基本資料型別資料在記憶體中的儲存表示小工具

檢視基本資料型別資料在記憶體中的儲存表示小工具

在寫這個小工具之前我們先了解一下命令列引數。

命令列引數。

什麼是命令列引數?應用程式在命令列方式執行時,以字串陣列的形式傳遞給main方法的引數。

一般格式(執行應用程式時) : 應用程式名 串1 串2 ...... 串n

按國際標準,c程式標準的main函式頭只有兩種:

1、不帶命令列引數。

int main(void)
{
}

2、帶命令列引數。

int main(int argc,char* argv[])
{
    //argc:命令列引數的個數 argument count
    //char *argv[]:argument vector陣列,每個元素char* 字串。
    //第二個引數也可以寫成char** argv。
}

特別注意:c語言中命令列執行時:程式名 字串1 字串2 ...... 字串n。

argv[0] = "程式名.exe" argv[1] = "字串1" ...... argv[argc - 1] = "字串n"。

檢視基本資料型別資料在記憶體中的儲存表示小工具

int main(int argc ,char* argv[])				
{
	/*用法: char/short/int/long/long long/float/double 待檢視的資料*/
	union //共用體
	{
		char ch[81];
		short s;
		int i;
		long l;
		long long ll;
		float f;
		double d;
	}u;

	int size = 1;	//	預設檢視的資料佔的位元組數

	if (!(argc == 3 || argc == 4))
	{
		printf("引數輸入有誤\n");
		exit(0);	//退出整個程式
	}
	//判斷引數型別
	if (!strcmp("char", argv[1]))
	{
		strcpy(u.ch, argv[2]);
		size = strlen(u.ch);
	}
	else if(!strcmp("short",argv[1]))
	{
		u.s = atoi(argv[2]);
		size = sizeof(u.s);
	}
	else if (!strcmp("int", argv[1]))
	{
		u.i = atoi(argv[2]);
		size = sizeof(u.i);
	}
	else if (!strcmp("long", argv[1]) && !strcmp("long", argv[2]))
	{
		u.ll = atol(argv[3]);
		size = sizeof(u.ll);
	}
	else if (!strcmp("long", argv[1]))
	{
		u.l = atoll(argv[2]);
		size = sizeof(u.l);
	}
	else if (!strcmp("float", argv[1]))
	{
		u.f = atof(argv[2]);
		size = sizeof(u.f);
	}
	else if (!strcmp("short", argv[1]))
	{
		u.d = atof(argv[2]);
		size = sizeof(u.d);
	}

	//輸出在記憶體中的表示
	if (!strcmp("char",argv[1]))
	{
		for (int i = 0; i < size; ++i)
		{
			printf("%02x ", u.ch[i] & 0xff);
		}
	}
	else
	{	//倒序輸出是因為採用了小端機儲存,如果正序輸出資料就會反過來表示
		for (int i = size - 1; i >= 0; --i)
		{
			printf("%02x ", u.ch[i] & 0xff);
		}
	}
	
	//或者也可以使用指標輸出
	/*
	*	if (!strcmp("char",argv[1]))
	*	{
	*		for (char* p = u.ch; p < u.ch + size ; ++p)
	*		{
	*			printf("%02x ", *p & 0xff);
	*		}
	*	}
	*	else
	*	{	
	*		for (char* p = u.ch + size -1 ; p >= u.ch; --p)
	*		{
	*			printf("%02x ", *p & 0xff);
	*		}
	*	}
	*/

	system("pause");
	return 0;
}

在vs裡面如和輸入命令列引數:

專案---》屬性---》除錯---》命令列引數;然後直接輸入你要輸入的命令列引數,然後就可以直接進行除錯了