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)