-
2021-05-21 01:01:37
C语言中,如何把十六进制或八进制的值赋给一个变量
C语言中,如何把十六进制或八进制的值赋给一个变量 怎样把一个十六进制的值赋给一个变量?
c语言支持二进制、八进制、十进制和十六进制的计数系统,在表示一个数字时,用某个特殊的字符来区别其所属的计数系统是必要的。在表示二进制数时,要在数字的末尾加上“b”(如101b);在表示八进制数时,要使用反斜杠(如\014);在表示十六制数时,要使用“0x”字符序列(如0x34);显然,在表示十进制数时,不需要任何标识符,因为十进制是缺省的计数系统。
要把一个十六进制的值赋给一个变量,你可以象下面这样做:
int x ;
x=0x20; /* put hex 20(32 in decimal) into x */
x='0x20' ; / * put the ASCII character whose value is hex 20 into x * /
只有了解了十六进制计数系统,你才能知道要赋的值应该如何表示,详见20.24。
怎样把一个八进制的值赋给一个变量?
把一个八进制的值赋给一个变量与把一个十六进制的值赋给一个变量一样简单: int x ;
x=\033; / * put octal 33 (decimal 27) into x * /
x='\033' ; / * put the ASCII character whose value is
octal 33 into x * /
同样,只有了解了八进制计数系统,你才能知道要赋的值应该如何表示,详见20.23。
更多相关内容 -
十六进制字符转long
2019-10-15 16:09:12工程所需,从字符数组中取对应字节数,拼接为int 或者 long(8字节)型返回。(超出8字节整型不考虑) /*拼接字节转化为long64 param1: 数组地址 param2: 起始字节下标 param3: 结束字节下标 return: 拼接值 */ ...工程所需,从字符数组中取对应字节数,拼接为int 或者 long(8字节)型返回。(超出8字节整型不考虑)
/*拼接字节转化为long64 param1: 数组地址 param2: 起始字节下标 param3: 结束字节下标 return: 拼接值 */ unsigned __int64 Hex2long(BYTE *hex_arr, int s, int e) { unsigned __int64 ret = 0i64; int i; for (i = s; i <= e; i++) { ret |= ((unsigned __int64)hex_arr[i]) << (8 * (e - i)); } return ret; } int main() { unsigned char buf[10] = {0x00,0x00,0x00,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; int temp = hex2long(buf,0,3);//取4个字节 uint64_t temp2 = hex2long(buf, 0, 7);//取8字节 cout <<"int:"<<temp <<endl<<"long:"<< temp2<<endl; return 0; }
其中 BYTE 类型为 unsigned char*。
结果:
-
如何在java中将十六进制字符串转换为long?
2021-07-17 03:07:59I want to convert a hex string to long in java.I have tried with general conversion.String s = "4d0d08ada45f9dde1e99cad9";long l = Long.valueOf(s).longValue();System.out.println(l);String ls = Long.to...I want to convert a hex string to long in java.
I have tried with general conversion.
String s = "4d0d08ada45f9dde1e99cad9";
long l = Long.valueOf(s).longValue();
System.out.println(l);
String ls = Long.toString(l);
But I am getting this error message:
java.lang.NumberFormatException: For input string: "4d0d08ada45f9dde1e99cad9"
Is there any way to convert String to long in java? Or am i trying which is not really possible!!
Thanks!
解决方案
Long.decode(str) accepts a variety of formats:
Accepts decimal, hexadecimal, and octal
numbers given by the following
grammar:
DecodableString:
Signopt DecimalNumeral
Signopt 0x HexDigits
Signopt 0X HexDigits
Signopt # HexDigits
Signopt 0 OctalDigits
Sign:
-
But in your case that won't help, your String is beyond the scope of what long can hold. You need a BigInteger:
String s = "4d0d08ada45f9dde1e99cad9";
BigInteger bi = new BigInteger(s, 16);
System.out.println(bi);
Output:
23846102773961507302322850521
For Comparison, here's Long.MAX_VALUE:
9223372036854775807
-
用C语言实现函数,功能:把十进制数(long型)以十六进制形
2021-05-19 05:18:212#include#include#include#includeusing namespace ...void ConvertLongToHexString(long Input,char* output){char *dest=output;assert(output!=NULL);while(Input){if(Input%16>10){*dest++='A'+Input%16-10...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)
-
二进制、十进制、十六进制理解
2020-10-21 11:23:121.如何理解二进制、十进制、十六进制 点击查看原文 1.1 十进制的理解: 生活中我们遇到的绝大部分数据都是十进制的,比如7、24、30、365等,如果把它们按照个位、十位、百位分解,可以这样表示: 数值 ... -
蓝桥杯(java):特殊回文数,十进制转十六进制,十六进制转十进制,十六进制转八进制,数列排序
2018-12-23 14:58:51输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。 输入格式 输入一行,包含一个正整数n。 输出格式 按从小到大的顺序输出满足条件的整数,每个整数占一行。 样例输入 52 样例... -
C语言中十六进制转十进制两种实现方法
2021-05-21 10:03:37C语言中十六进制转十进制两种实现方法C语言 · 十六进制转十进制问题描述从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、... -
十进制转十六进制
2021-05-03 19:45:55十进制转十六进制 问题描述 十六进制数是在程序设计时经常要... 给出一个非负整数,将它表示成十六进制的形式。 输入格式 输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647 输出格式 输出这个整数的1 -
C语言二进制、八进制、十六进制整数书写和输出
2020-04-18 19:35:52文章目录一、二进制、八进制、十六进制整数的书写1、二进制2、八进制3、十六进制4、需要注意的坑二、二进制、八进制、十六进制整数的输出四、版权声明 整数是我们生活中常用的数据类型,也是编程中常用的一种数据,... -
java实现16进制字符串转化为long值
2014-03-18 14:41:21本篇博客主要介绍一下如何将16进制的字符串转化为long值,具体代码实现如下: /** *@Description: */ package cn.lulei.util; public class Test { /** * @param md5L16 * @return * @Date:2014-... -
蓝桥杯——十六进制转八进制
2021-01-27 13:34:52蓝桥杯——十六进制转八进制,Java,基础练习 -
C语言(单片机)十进制转成十六进制字符串
2019-11-15 23:20:54单片机中十进制转十六进制 在进行单片机编码过程中用到过的一个转换方法,在此记录一下,方便以后使用,只能是转成十六进制是 两个 字节的数字,即 可转的范围0<n<256 可修改 u8->u16,转换更高范围 u8 temp... -
C++十六进制宏的用法
2020-12-20 19:13:39流行的用法:用二进制的每一位代表一种状态。001,010,100这样就表示三种状态。通过或|运算就可以组合各种状态。001 | 010 = 011001 | 010 | 100 = 111通过与&运算可以去除某种状态。111 & 001 = 110可以定义... -
c/c++实现二进制/十进制/十六进制互转
2021-01-18 19:10:14c实现二进制与十进制互转 -
当printf以十六进制打印char类型数组时引发的bug
2020-05-17 23:14:03对此我开始百度当十六进制打印char和unsigned char为什么它们得结果会不一样,然后就找到了自己想要的答案,对此,我想把我这次学到得知识记录在这里,供自己学习。我们先学习一下char和unsigned char的区别吧 char... -
Java中十六进制数(正负)的转换为十进制
2020-06-11 15:30:131.二进制转化为十进制 二进制数一般转化为十进制数都是直接调用 Integer.parseInt(hexadecimalStr, 2); Long.parseInt(hexadecimalStr, 16); 直接使用这个方法,就能将数据转化为对应的十进制...这个十六进制可能只有 -
Java Long类toHexString()方法的示例
2021-03-08 17:29:20toHexString()方法用于在基数16中将long类型给定参数[value]的十六进制字符串表示为无符号long。toHexString()方法是一个静态方法,也可以使用类名进行访问,并且如果我们尝试使用类对象访问该方法,那么我们也不会... -
MFC里有现成函数将十六进制整型转换成十进制整型吗?
2019-05-15 22:17:03如题,十六进制数是整型的,要转换成的十进制也要是int型的,转换后赋值给m,有现成的函数调用嘛,怎么调用?如果没有咋写。 -
十六进制转十进制(C语言实现)
2018-01-29 14:40:17首先,了解如何将字符串转化为十进制数: 从数字组成的字符串转化为十进制数步骤如下: 1、挨个读取数组,从第0位开始 2、将字符转化为数字。比如从'1'转化为1。可以参考ASCII码表,字符'0'是48,所以只需要将字符... -
【C++】使用memset赋值,以及“无穷大”的十六进制讲解~~
2018-08-06 20:15:05最后,0x3f3f3f3f还能给我们带来一个意想不到的额外好处:如果我们想要将某个数组清零,我们通常会使用memset(a,0,sizeof(a))这样的代码来实现(方便而高效),但是当我们想将某个数组全部赋值为无穷大时(例如解决... -
C语言二进制、八进制、十进制、十六进制深入探究
2021-07-17 00:11:44首先来一篇好文:C语言中的二进制数、八进制数和十六进制数 C语言中的整数除了可以使用十进制,还可以使用二进制、八进制和十六进制。 二进制数、八进制数和十六进制数的表示 一个数字默认就是十进制的,表示一个十... -
浮点数转十六进制,实用!!!
2019-06-22 18:26:38浮点转十六进制 函数如下: /*作用:浮点数---转---十六进制 */ union fnum { long int m; float f; }; 然后需要在引用的函数内声明共用体比如: union fnum num; 用法:共用体是将 多个成员变量共用一个... -
Java 一个十六进制占几个字节及基本数据类型所占字节
2019-06-26 00:09:13目录 节介绍 十六进制所占字节 Java中各进制表示 ...1个十六进制占4位(bit),1个字节(B)占8位(bit),所以一个十六进制占0.5个字节,即一个字节可以表示两个十六进制(2个十六进制 = 1个字... -
java基础知识(包含二进制、八进制、十进制和十六进制之间的转换例子很好理解)
2019-09-29 18:19:51十进制数520,转十六进制通过520的二进制1000001000没四位合成一位应该是0x208 字符常量由一对单引号括起来,比如‘a’就是字符常量。在计算机内部,将这个字符序列解释成小数字。输出的时候这些小数字解释成对应... -
十六进制转换成八进制
2019-01-06 23:40:34从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。 注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。 样例输入 FFFF 样例输出 65535*/ #include<stdio... -
Class文件十六进制背后的秘密
2020-02-15 16:23:00这里提供一个查看字节码文件的命令: 1、以十六进制查看Class文件 技巧:vim + xxd = 十六进制编辑器 vim -b xxx.class 可以以二进制将class文件打开; vim内调用::%!xxd 以十六进制显示当前文件; 修改完成之后,... -
十六进制数前多了FFFFFF
2019-03-28 14:47:38%02X与%2X的区别:都是表示十六进制格式,但前者当不足两位十六进制时在前面补0,如02,而后者为2。 作者:stpeace 来源:CSDN 原文: https://blog.csdn.net/stpeace/article/details/51794230 版权声明:本文... -
java中定义16十六进制数组
2016-07-03 22:24:17byte []={};例如有两个数,0B和05,要直接写入数据中的话,0B会报错,如byte []={0B,05};这样在0B处会有报错,很明显不应该这样写,所以要写为:byte []={0x0B,0x05},这个是十六进制规范写法。 -
数据类型的划分和进制之间的转换方式(二进制,十进制,八进制,十六进制)
2018-12-26 21:56:07值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。 b. 值类型直接存储其值 c. 值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中 d. 值类型总是分配在它...