Sponsored Content
Homework and Emergencies Homework & Coursework Questions Splitting a numbers binary representation for a double. Post 302665447 by robin_simple on Monday 2nd of July 2012 09:38:27 PM
Old 07-02-2012
Code:
#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
        char *hex_key = "abcdef012345678";
        long long key = strtoll( hex_key, NULL, 16 );

        cout << key << endl;
}

on compilation:
g++ b.cpp
b.cpp: In function ‘int main()’:
b.cpp:7: warning: deprecated conversion from string constant to ‘char*’

output:
./a.out
773738358679819896

Is there anything I can do to get rid of the warning?

Also, the full hex_key is 9abcdef012345678 which is different from what I used in the above code because of the 9 at the beginning. The output of this is 9223372036854775807
which is different from a result shown on a webpage that calculates hexadecimal numbers. All the outputs for the other hex_key values are consistent with the calculating website. Why is this number different?

Also, in your first reply you gave me
Code:
unsigned char *cval = "123";
    int val = 0;
    int i;

    for( i = 0; i < strlen( cval ); i++ )
    {
        val <<= 4;
        val += cval[i] - '0';
    }
    printf( "%x\n", val );

and I am wondering why you subtract '0' and why you shift 4. Is it necessary to shift << by four each time you add a new hex digit?

---------- Post updated at 08:38 PM ---------- Previous update was at 12:56 PM ----------

ok, strtoull() was the function that gets the whole 16 hex digits. the unsigned long long type was what I should have been using.
 

8 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Using binary representation of IEEE 754

Hi! What is the way to get the binary representation of a IEEE 754 (like 0001110110001111010101100111001011100100101010111101) without using perl. Bash for example, would be fine. I need to put that representation in a string for some operation and then to put that string back in a float. ... (3 Replies)
Discussion started by: Zephyr
3 Replies

2. Programming

Internal representation of double

I came across a puzzle which I can not explain. The setup is SCO OpenServer 5.7 (32 bit OS) and native SCO compiler. double is 8 bytes long on this system. I am able to populate the double variable with two different sets of values that produces the same double value, please see below: #include... (7 Replies)
Discussion started by: migurus
7 Replies

3. Shell Programming and Scripting

Splitting file based on line numbers

Hello friends, Is there any way to split file from n to n+6 into 1 file and (n+7) to (n+16) into other file etc. f.e I have source pipe delimated file with 20 lines and i need to split 1-6 in file1 and 7-16 in file2 and 17-20 in file 3 I need to split into fixed number of file like 4 files... (2 Replies)
Discussion started by: Rizzu155
2 Replies

4. Shell Programming and Scripting

Put double quotes around numbers

Hi, consider a file which has data such as "random text",912345,"54","finish" "random text",9991236745,"9954","finish" I want to replace the numbers that don't have double quotes around them with ones that do; so the output should be "random text","912345","54","finish" "random... (4 Replies)
Discussion started by: Storms
4 Replies

5. Shell Programming and Scripting

Splitting a file based on positive and negative numbers

Dear All, I have to split a tab delimited file in two files based on the presence of a positive or negative in column number 9 , for example file: A 1 5 erg + 6766 0.9889 0.9817 9.01882 erg inside upstream B 1 8 erg2 + 6766 0.9889 0.9817 -9.22 erg2 inside... (3 Replies)
Discussion started by: paolo.kunder
3 Replies

6. Shell Programming and Scripting

Convert binary file to csv and then back to the binary format

Hello *nix specialists, Im working for a non profit organisation in Germany to transport DSL over WLAN to people in areas without no DSL. We are using Linksys WRT 54 router with DD-WRT firmware There are at the moment over 180 router running but we have to change some settings next time. So my... (7 Replies)
Discussion started by: digidax
7 Replies

7. Programming

How bit representation of a number can be done in c?

I have an assignment in which a character is the input of which some bits(from a position to certain position) are to be inverted (1's complement) and then the resultant character is to be returned....for example unsigned char x = J from p = 3 to offset n = 5 01001010 inverted to... (1 Reply)
Discussion started by: ezee
1 Replies

8. UNIX for Beginners Questions & Answers

Splitting a file based on negative and positive numbers

I have a file that is pipe delimited and in Column F they have number values, both positive and negative. I need to take the one file I am starting with and split it into two separate files based on negative and positive numbers. What is the command to do so? And then I need to also transfer... (4 Replies)
Discussion started by: cckaiser15
4 Replies
STRTOL(3)						   BSD Library Functions Manual 						 STRTOL(3)

NAME
strtol, strtoll, strtoimax, strtoq -- convert a string value to a long, long long, intmax_t or quad_t integer LIBRARY
Standard C Library (libc, -lc) SYNOPSIS
#include <stdlib.h> #include <limits.h> long strtol(const char * restrict nptr, char ** restrict endptr, int base); long long strtoll(const char * restrict nptr, char ** restrict endptr, int base); #include <inttypes.h> intmax_t strtoimax(const char * restrict nptr, char ** restrict endptr, int base); #include <sys/types.h> #include <stdlib.h> #include <limits.h> quad_t strtoq(const char *nptr, char **endptr, int base); DESCRIPTION
The strtol() function converts the string in nptr to a long value. The strtoll() function converts the string in nptr to a long long value. The strtoimax() function converts the string in nptr to an intmax_t value. The strtoq() function converts the string in nptr to a quad_t value. The conversion is done according to the given base, which must be between 2 and 36 inclusive, or be the special value 0. The string may begin with an arbitrary amount of white space (as determined by isspace(3)) followed by a single optional '+' or '-' sign. If base is zero or 16, the string may then include a ``0x'' prefix, and the number will be read in base 16; otherwise, a zero base is taken as 10 (decimal) unless the next character is '0', in which case it is taken as 8 (octal). The remainder of the string is converted to a long, long long, intmax_t or quad_t value in the obvious manner, stopping at the first charac- ter which is not a valid digit in the given base. (In bases above 10, the letter 'A' in either upper or lower case represents 10, 'B' repre- sents 11, and so forth, with 'Z' representing 35.) If endptr is not NULL, strtol() stores the address of the first invalid character in *endptr. If there were no digits at all, however, strtol() stores the original value of nptr in *endptr. (Thus, if *nptr is not '' but **endptr is '' on return, the entire string was valid.) RETURN VALUES
The strtol(), strtoll(), strtoimax() and strtoq() functions return the result of the conversion, unless the value would underflow or over- flow. If no conversion could be performed, 0 is returned and the global variable errno is set to EINVAL (the last feature is not portable across all platforms). If an overflow or underflow occurs, errno is set to ERANGE and the function return value is clamped according to the following table. Function underflow overflow strtol() LONG_MIN LONG_MAX strtoll() LLONG_MIN LLONG_MAX strtoimax() INTMAX_MIN INTMAX_MAX strtoq() LLONG_MIN LLONG_MAX ERRORS
[EINVAL] The value of base is not supported or no conversion could be performed (the last feature is not portable across all plat- forms). [ERANGE] The given string was out of range; the value converted has been clamped. SEE ALSO
atof(3), atoi(3), atol(3), strtod(3), strtonum(3), strtoul(3), wcstol(3) STANDARDS
The strtol() function conforms to ISO/IEC 9899:1990 (``ISO C90''). The strtoll() and strtoimax() functions conform to ISO/IEC 9899:1999 (``ISO C99''). The BSD strtoq() function is deprecated. BSD
November 28, 2001 BSD
All times are GMT -4. The time now is 08:49 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy