• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 954
  • Last Modified:

Join 2 words to make a dword

I am reading data back from a microcontroller using modbus.  I need to join two words together to make a dword.

I have both word values stored in variables in C, as below:

var1 = 15
var2 = 25

I need to join them so var3 has the value 1525

I also need to be able to split them back up into 2 words.

Are there standard C functions for performing these operations? cast 2 words to a dword?
0
richardoc
Asked:
richardoc
  • 4
  • 3
  • 2
  • +2
1 Solution
 
Sjef BosmanGroupware ConsultantCommented:
Pls explain? I assume 15 is 0x15, that fits a byte. So does 0x25. Joint, they for a word 0x1525, if you use
    var3= (var1<<8)|var2

Other operations are comparable (but always bitwise).
0
 
richardocAuthor Commented:
Basically I have 2 integers, and I need to join them to make a long . I used 15 and 25 just as examples, but the end value must be <value1><value2>

Does this make sense?
0
 
ankuratvbCommented:
How About:

int num1=15,num2=25;

long longnum=(num1*100)+num2;
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
ankuratvbCommented:
>I also need to be able to split them back up into 2 words.

int num1,num2;

num1=longnum%100;

num2=longnum/100;
0
 
ankuratvbCommented:
Oh My God,WHat am i typing?

I need some sleep.
0
 
Sjef BosmanGroupware ConsultantCommented:
Standard way is using bitwise operators. To join the two vars (portable):

    unsigned long var3;
    unsigned int var1, var2;

    var3= ((unsigned long)var1<<16) | var2

To split them once again:
    var1= var3<<16;
    var2= var3&0xFFFF;
0
 
brettmjohnsonCommented:
small bug [notice right shift]:

To split them once again:
   var1= var3>>16;
   var2= var3&0xFFFF;


0
 
Sjef BosmanGroupware ConsultantCommented:
I might need some sleep as well... :(
0
 
grg99Commented:
Your question is ambiguous.

Most computers nowdays are binary base, so when you put two bytes together, you end up with 256 times the high byte plus the low byte.

From your example, it looks like you expect to get 100 times the high part plus the low part.

Please clarify, do you want to combine the digits decimally, or binary-wise?

Regards,


grg99

0
 
Sjef BosmanGroupware ConsultantCommented:
Your question is also rather schizo. You seem to know well about words and dword (assembler stuff) but seems not to be familiar with more or less elementary bit-fiddling operators or assembler. If my solution above is what you were after. Or am I mistaken?? Or is this a trick question?
0
 
richardocAuthor Commented:
I'm a high level programmer working with assembly programmers, so I know some terms but don't neccessarily understand them :)  Bad I know, but hey, you gotta start somehow.  sjef_bosman's answer did the job nicely. Thanks all.
0

Featured Post

Will You Be GDPR Compliant by 5/28/2018?

GDPR? That's a regulation for the European Union. But, if you collect data from customers or employees within the EU, then you need to know about GDPR and make sure your organization is compliant by May 2018. Check out our preparation checklist to make sure you're on track today!

  • 4
  • 3
  • 2
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now