c语言long的作用,用C语言实现函数,功能:把十进制数(long型)以十六进制形

这篇博客分享了如何使用C语言编写函数ConvertLongToHexString,将long型十进制数转换为十六进制字符串的方法。博主提供了多种实现方式,包括使用位运算、移位、模运算等技巧,所有实现均以'0x'开头,'0'结尾。这些函数可用于将任意long型数值转换为其对应的16进制字符串表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2

#include

#include

#include

#include

using namespace std;

void ConvertLongToHexString(long Input,char* output)

{

char *dest=output;

assert(output!=NULL);

while(Input)

{

if(Input%16>10)

{

*dest++='A'+Input%16-10;

}

else

{

*dest++=Input%16+'0';

}

Input=Input/16;

}

*dest++='x';

*dest++='0';

*dest='\0';

int i=0,j=strlen(output)-1;

while(i

{

char temp;

temp=output[i];

output[i]=output[j];

output[j]=temp;

i++;

j--;

}

}

int main()

{

char *output=(char *)malloc(1);

ConvertLongToHexString(10000000,output);

cout<

return 0;

}

发表于 2015-04-24 21:01:29

回复(0)

1

void ConvertLongToHexString(long Input,char* output) {

static char HexStr[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

unsigned char * p = (unsigned char *)(&Input);

for ( int i=0;i

output[i*2]   = HexStr[p[i]>>4];

output[i*2+1] = HexStr[(p[i]<<4)>>4];

}

}

发表于 2015-05-13 15:17:54

回复(1)

1

1.我的思路是: 把这个long型(32bit)的数据每次右移4位 ,这4位数据和

1111进行相与,结果放入字符数组的末尾(也可以用栈来实现)

int _tmain(int argc, _TCHAR* argv[])

{

char out[11] = {0};

ConvertLongToHexString(1120, out);

printf("%s",out);

system("pause");

return 0;

}

void ConvertLongToHexString(long Input,char* output)

{

long in = Input;

for(int i = 0; i < 8; i++)

{

int temp = in & 0x0000000F;

output[9-i] = (temp < 10) ? ('0' +temp) : ('A' + temp -10);

in = in >> 4; //右移4位

}

output[10] = '\0';

output[0] = '0';

output[1] = 'x';

}

结果输出: 0x00000460

编辑于 2015-04-29 13:41:52

回复(0)

1

char *get16string(long num)      /*得到16进制形式的字符串*/

{

int i = 0;

char *buffer = (char *)malloc(11);

char *temp;

buffer[0] = '0', buffer[1] = 'x', buffer[10] = '\0';

temp = buffer + 2;

for (i = 0; i < 8; i++)

{

temp[i] = (char)(num << 4 * i >> 28);  /*乘法优先级高于移位符, 移位符左结合*/

temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16; /*之所以会出现负数是因为:左移之后,若最高位为1,则编译器认为该数为负数,执行右移操作(该编译器执行算术移位)时,移入位均用1补齐*/

temp[i] = temp[i] < 10 ? temp[i] + '0' : temp[i] - 10 + 'A';

}/*从高位开始,每一次循环都取出num的二进制码中的四位,并转换成一个16进制的数值。*/

return buffer;

}

编辑于 2015-01-31 16:49:35

回复(2)

1

//0X开头 大写的ABCDEF表示的16进制字符串

void ConvertLongToHexString(long Input,char* output)

{

long num=Input;

int i=9;

output[0]='0';

output[1]='X';

output[10]='\0';

while(num>0){

int r=num%16;

if(r>=10)

output[i--]='A'+r-10;

else

output[i--]='0'+r;

num/=16;

}

while(i>1)

output[i--]='0';

}

发表于 2015-04-24 16:31:12

回复(0)

0

#include

#include

void ConvertLongToHexString(long input, char* s) {

static char table[16] = {'0', '1', '2', '3', '4', '5', '6',

'7', '8', '9', 'a', 'b', 'c',

'd', 'e', 'f'};

assert(s != NULL);

s[0] = '0';

s[1] = 'x';

if (input == 0) {

s[2] = '0';

return;

}

long tmp = input, num = 0;

while ((tmp >>= 4) != 0) {

num++;

}

for (tmp = input; tmp != 0; tmp >>= 4) {

s[num + 2 ] =((tmp & 0xf) < 10) ? ((tmp & 0xf) +

'0') : ('a' + (tmp & 0xf) - 10);

//s[num + 2 ] = table[tmp &

0xf];

--num;

}

}

void test(long value) {

char s[8192] = {'\0'};

ConvertLongToHexString(value, s);

std::cout << s << std::endl;

}

int main() {

test(2012);

test(1120);

return 0;

}

编辑于 2015-05-08 10:09:09

回复(0)

0

#include

void ConvertLongToHexString(long Input,char* output)

{

char s[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

int  m,i;

char str[100]={'0'};

int cnt=0;

while(Input)

{

m=Input%16;

* output=s[m];

str[cnt++]=* output;

output++;

Input=Input/16;

}

for(i=cnt-1;i>=0;i--)

printf("%c",str[i]);

}

int main()

{

long num;

char string[100]={'0'};

scanf("%d",&num);

ConvertLongToHexString(num,string);

return 0;

}

发表于 2015-05-07 18:04:39

回复(0)

0

void ConvertLongToHexString(long Input,char* output)

{

static char* szHex = "0123456789abcdef";

output[0] = '0';output[1] = 'x';output[10] =0 ;output += 2;

for (int i = 0; i < 8; i++)

{

int n = 28 - i * 4;

output[i] = szHex[(Input & (0xf<>n];

}

}

编辑于 2015-05-06 17:30:48

回复(0)

0

void ConvertLongToHexString(long Input,char* output){

int i;

char tmp; //用于存取低四位值

for( i=1; i<=8; i++ ){ //32位变成8位字符串

tmp = (char)(Input & 0x0F); //取低4位的值

if( tmp<10 ){

*(output+10-i) = tmp + '0'; //保存字符'0'到'9'

}else{

*(output+10-i) = tmp - 10 + 'A'; //保持字符'A'到'F'

}

Input >>= 4;

}

}

int main(void){

long num = 0x129abef9;

char str[11] = "0X"; ConvertLongToHexString(num,str);

printf("%d : %s",num,str);

}

编辑于 2015-05-02 06:50:51

回复(0)

0

#include

#include

using namespace std;

//时间复杂度O(n),n为数组Output的长度(转换机制:除以16,余数逆序)

void ConvertLongToHexString(long Input,char * Output)

{

//字符数组默认分配长度为16,strlen(Output)=16

char *p=Optput;//定义指针变量,只想当前内存空间,

while(Input>0)

{

Input%16>=10 ? *p++='A'+Input%16-10:*p++='0'+Input%16;

/*p指针一直在变化,所以它指向的长度是当前位置到遇到第一个'\0'的长度,

所以p的长度逐渐减小*/

Input/=16;

}

*p++='x';

*p++='0';

*p='\0';//当赋值为'\0'时,当前位置元素就是'\0',所以p长度变为0

int i=0;

int j=strlen(Output)-1;//计算数组的实际长度

char temp;

//字符数组逆置

while(i

{

temp=Output[i];

Output[i]=Output[j];

Output[j]=temp;

i++;

j--;

}

cout<

}

int main()

{

char *Output=(char *)malloc(1);

/*判断Output内存是否分配成功,如果分配失败则程序结束,

避免出现内存分配失败,程序中断的现象*/     assert(Output!=NULL);

ConvertLongToHexString(10000,Output);

system("pause");

return 0;

}

发表于 2015-04-29 15:50:49

回复(0)

0

这道题,回答起来并不容易。

发表于 2015-04-27 21:28:54

回复(0)

0

char table[16]

={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

void ConvertLongToHexString(long Input,char* output)

{

long quot;

int cnt = 9;

int i = 2;

output[0] =

'0';

output[1] = 'x';

while(Input > 15)

{

quot = (Input>>4);

output[cnt--] =

table[Input-(quot<<4)];

Input = quot;

}

output[cnt] = table[Input];

if(cnt==2) output[10] =

'\0';return;

while(cnt<10) output[i++] = output[cnt++];

output[i++] = '\0';

}

编辑于 2015-04-25 16:22:19

回复(0)

0

#include

#include

#include

void ConvertLongToHexString(long

Input,char* output)

{

short bit[20];

char* Hexbit;

Hexbit=output;

long temp1;

int i=0;

long temp2=1;

int num =0;

long temp3=Input;

assert(output!=NULL);

do

{

temp3=temp3/

temp2;

temp2*=16;

num++;

}while(temp3<16);

for(int i=0;i

{

bit[i]=Input/temp2;

Input=

Input%

temp2;

temp2=temp2/16;

if(bit[i]>=0&&bit[i]<=9)

*(Hexbit+i)=

bit[i]+0x30;

else if(bit[i]>=10&&bit[i]<=15)

{

*(

Hexbit+i)=

bit[i]-10+'A';//*(

Hexbit+i)=

bit[i]-10+'a'

}

else

{

}

}

*(Hexbit+i)='\0';//最后记得为“\0”

}

int main()

{

char str[100];

long Num;

cout<

cin>>Num;

ConvertLongToHexString(Num,str);

}

发表于 2015-04-24 22:29:04

回复(0)

0

void ConvertLongToHexString(long Input,char* output)

{

int i = 7;

while(Input) {

long tp = Input % 16;

output[i--] = (tp < 10) ? tp + '0' : tp - 10 + 'A';

Input /= 16;

}

for( ; i>-1; --i) {

output[i] = '0';

}

output[8] = '\0';

}

发表于 2015-04-24 08:19:40

回复(0)

0

答案:

void ConvertLongToHexString(long input,char* output){

output= (char*)malloc(11);

buffer[0] = '0';

buffer[1] = 'x';

buffer[10] = '/0';

char* temp = buffer + 2;

for (int i=0; i < 8; i++) {

temp[i] = (char)(input<<4*i>>28);

temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16;

temp[i] = temp[i] < 10 ? temp[i] + 48 : temp[i] + 55;

}

}

发表于 2015-01-28 12:11:32

回复(0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值